我正在使用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”是父级的一个实例,我不想要它。
答案 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元素,因此执行了单击。不是我想要的。