2011-10-01 73 views
2

我正在使用CoffeeScript和KnockoutJS,并从函数中获取我的视图模型的值时出现问题。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'是父母的一个实例,我不想要。

回答

5

search功能“这个”是父进程的一个实例...

这就要看你怎么称呼它。如果你

m = new Application.ViewModel 
m.search() 

然后thism;如果你写

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

然后thisobj

总之,只要使用CoffeeScript中的=>操作:

search: => 
    alert @searchTerm 

这样,this/@search将指向ViewModel实例。如特拉维斯所说,

thisRef只是指向类,而不是实例。

0

你已经有一个thisRef对象挂在身边,使用thisRef.searchTerm而不是@searchTerm。我经常使用jQuery时发生...

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

由于@doSomethingElse()将被绑定到点击是为执行的DOM元素。不是我想要的。

+0

啊对不起,我应该把这个参考拿出我的代码示例。无论如何,这对我无能为力 – Charlie