2015-07-13 108 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