2011-10-01 101 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