我在foreach循环中包含了一个单击绑定,如下所示:
<tbody data-bind="foreach: locationConfigSet">
<tr>
<td data-bind="text: address"></td>
<td><a data-bind="attr: {href: 'http://maps.google.com/maps?z=12&t=m&q=loc:' + latitude + '+' + longitude}" target="_blank" class="btn btn-primary btn-xs">Map</a></td>
<td data-bind="text: allowance"></td>
<td><button class="btn btn-danger btn-xs" data-bind="click: $parent.deleteconfig($data)">Delete</button></td>
</tr>
</tbody>
但是一旦页面在循环中加载(没有单击),函数deleteconfig就会被执行,直到它执行的时间与foreach循环执行完全相同。
答案 0 :(得分:4)
data-bind="click: $parent.deleteconfig($data)"
直接调用函数。
您可以改为使用:
data-bind="click: $parent.deleteconfig.bind($parent, $data)"
解释here
请参阅此代码段:
var elementVM = function(id) {
this.id = ko.observable(id);
}
var parentVM = function() {
this.list = ko.observableArray([new elementVM(0), new elementVM(1)]);
this.onclick = function(text) {
text(text() + 1);
}
}
ko.applyBindings(new parentVM());
&#13;
.child {
width: 50px;
text-align: center;
border: 1px solid black;
background-color: yellow;
cursor: pointer;
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="foreach: list">
<div class="child" data-bind="click: $parent.onclick.bind($parent, $data.id), text: id"></div>
</div>
&#13;