2012-03-17 65 views
3

我有以下KnockoutJS模板(與jquery.tmpl渲染):KnockoutJS - 點擊模板事件

<script id="contactsTemplate" type="text/html"> 
    <li data-bind="click: contactViewModel.test">${DisplayName}</li> 
</script> 

<ul id="contact-list" data-bind="template: {name: 'contactsTemplate', foreach:contacts}"> 
</ul> 

和下面的模型視圖:

var contactViewModel = function (contacts) { 
var self = this; 

self.contacts = contacts; 

self.test= function() { 
    console.log("CLICK"); 
} 

,如果我使用此代碼,點擊事件不會觸發。如果我創建像一個匿名函數:

<script id="contactsTemplate" type="text/html"> 
    <li data-bind="click: function(){contactViewModel.test()}">${DisplayName}</li> 
</script> 

我得到以下異常:

Uncaught TypeError: Object function (contacts) { 
var self = this; 
self.contacts = contacts; 
self.test= function() { 
    console.log("CLICK"); 
} 
} has no method 'test' 

SOLUTION

的解決辦法是:$父。

data-bind="click: $parent.test" 

回答

3

contactViewModel函數是一個構造函數,但是,你要使用它像已經通過函數構造一個對象的實例。您的contactViewModel公開了一組您正在綁定到contactsTemplate模板的聯繫人。出於這個原因,此模板中所有綁定的「上下文」都是數組中的對象實例。綁定到父對象上的功能,即contactViewModel,使用基因敲除2.0父僞變量:

data-bind="click: $parent.test" 
+0

看來這是行不通的,它打破了,他將第一個元素之後。我的綁定:ko.applyBindings(new contactViewModel(contacts),$(「#contact」)[0]); – 2012-03-17 12:17:26

+0

@KaffeeBohne - 啊...我看到你的問題。我已經更新了我的答案。 – ColinE 2012-03-17 12:58:09