【发布时间】:2013-06-02 01:54:45
【问题描述】:
我正在将一个剔除函数数据绑定到我的 html。
下面是视图模型:
var DonutViewModel = function () {
this.donuts = ko.observableArray();
//donutData = JSON.parse(donutData);
var items = $.map(donutData, function (data) { return new Donut(data) });
this.donuts(items);
this.deletedonut = function (item) {
this.donuts.remove(item);
}
}
var viewModel;
$(document).ready(function () {
viewModel = new DonutViewModel();
ko.applyBindings(viewModel);
});
以下是html:
<tr>
<td><input id="txtdonutid" type="text" data-bind="value:id"/></td>
<td><input id="txtdonuttype" type="text" data-bind="value:type"/></td>
<td><input id="txtdonutname" type="text" data-bind="value:dname"/></td>
<td><input id="txtppu" type="text" data-bind="value:ppu"/></td>
<td><input type="button" value="Delete Donut" data-bind="click: function() {$parent.deletedonut($data)}"/></td>
</tr>
请注意我是如何对删除功能进行数据绑定的,并且这有效!。但如果我执行以下操作:
<td><input type="button" value="Delete Donut" data-bind="click: {$parent.deletedonut($data)}"/></td>
好吧,这行不通。删除功能甚至没有被命中。
谁能告诉我我做错了什么?
【问题讨论】:
-
写
data-bind="click: function() {$parent.deletedonut($data)}"是正确的语法。为什么要写data-bind="click: {$parent.deletedonut($data)}"? -
好吧,如果您查看knockoutjs.com/documentation/click-binding.html,点击事件的绑定语法是 data-bind="click: myfunction"。这并不是说您必须在点击绑定中使用 function() 。那为什么不一样呢?
-
但是如果你想添加额外的参数,你需要那个语法。请参阅 data-bind="click: {$parent.deletedonut($data)}" 语句。但是,在您的情况下,以下应该有效:
data-bind="click: $parent.deletedonut" -
data-bind="click: $parent.deletedonut" - 这行得通,谢谢!
-
顺便说一句,你的意思是,如果我想要比默认数据更多的参数,我应该使用上面的语法是吗?
标签: function knockout.js ko.observablearray