2015-07-13 113 views
0

我想要一堆按鈕,當你點擊按鈕時,它會提醒你它的名字。目前我的代碼看起來是這樣的:Knockout JS每個具有點擊功能的多個按鈕

HTML:

<ul data-bind="foreach: items"> 
    <button data-bind="text: name, click: alertName(name)"></button> 
</ul> 

JS:

ko.applyBindings({ 
    items: [{"name":"Burt"},{"name":"Sam"},{"name":"Greg"}] 
}); 

function alertName(name){ 
    alert(name); 
} 

我遇到錯誤了一把:

未捕獲的ReferenceError:無法處理綁定「foreach:function(){return items}」

消息:無法處理bindin G「點擊:函數(){返回警報名稱(姓名)}」

消息:警報名稱沒有被定義

有一個簡單的方法在knockoutjs實現這一目標? 我在這裏有一個jsfiddle:http://jsfiddle.net/hny7295e/

+1

如果您還沒有準備好,我強烈建議檢查淘汰賽的官方教程,如果你打算做KO的工作。 http://learn.knockoutjs.com/#/?tutorial=intro –

回答

1

你應該創建一個ViewModel。看一下ViewModels的文檔。 alertName方法應該在這個ViewModel上。由於該方法不在單個項目上,因此您需要使用$parent.alertName()。循環中的當前項目將通過淘汰賽傳遞給alertName方法。

function ViewModel() { 
    var self = this; 

    self.items = [{"name":"Burt"},{"name":"Sam"},{"name":"Greg"}]; 

    self.alertName = function (item) { 
     alert(item.name); 
    }; 
} 

var viewModel = new ViewModel(); 

ko.applyBindings(viewModel); 

JsFiddle