CoffeeScript + KnockoutJS函数绑定

时间:2011-10-01 15:25:29

标签: javascript coffeescript knockout.js

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

我有一个视图模型:

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

编译为:

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;
})();

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

2 个答案:

答案 0 :(得分:5)

  

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

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

m = new Application.ViewModel
m.search()

然后this将为m;如果你写

obj = {search: m.search}
obj.search()

然后this将为obj

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

search: =>
    alert @searchTerm

这样,this中的@ / search将指向ViewModel个实例。

正如特拉维斯所说,

thisRef只会指向班级,而不是实例。

答案 1 :(得分:0)

您已经有thisRef个对象,请使用thisRef.searchTerm代替@searchTerm。我经常在使用jQuery时发生这种情况...

doSomething = ->
  target = $(@)
  $("#blah").click ->
    target.doSomethingElse()

由于@doSomethingElse()将绑定到DOM元素,因此执行了单击。不是我想要的。