CoffeeScript + KnockoutJS函数绑定

Cha*_*lie 2 javascript coffeescript knockout.js

我正在使用CoffeeScript和KnockoutJS,并且在函数中获取视图模型的值时遇到问题.

我有一个视图模型:

window.Application || = {}
class Application.ViewModel 
    thisRef = this
    searchTerm: ko.observable("")
    search: ->
        alert @searchTerm
Run Code Online (Sandbox Code Playgroud)

编译为:

window.Application || (window.Application = {});
Application.ViewModel = (function() {
  var thisRef;
  function ViewModel() {}
  thisRef = ViewModel;
  ViewModel.prototype.searchTerm = ko.observable("");
  ViewModel.prototype.search = function() {
    return alert(this.searchTerm);
  };
  return ViewModel;
})();
Run Code Online (Sandbox Code Playgroud)

此视图模型是父视图模型的一部分,它将其公开为字段.问题是我无法获得对子视图模型的引用.在搜索功能中,"this"是父级的一个实例,我不想要它.

Tre*_*ham 5

search函数'this'中是父的一个实例...

这取决于你如何称呼它.如果你这样做

m = new Application.ViewModel
m.search()
Run Code Online (Sandbox Code Playgroud)

然后thism; 如果你写

obj = {search: m.search}
obj.search()
Run Code Online (Sandbox Code Playgroud)

然后thisobj.

无论如何,只需使用CoffeeScript的=>运算符:

search: =>
    alert @searchTerm
Run Code Online (Sandbox Code Playgroud)

这样,this/ @within search将指向ViewModel实例.

thisRef 正如特拉维斯所说的那样,只会指向阶级,而不是实例.