在淘汰中,我想覆盖默认的foreach
绑定:
var foreachInit = ko.bindingHandlers.foreach.init;
ko.bindingHandlers.foreach.init = function () {
foreachInit.apply(this, arguments);
};
但即使这个简单的片段也会触发错误:
您无法多次将绑定应用于同一元素
请参阅小提琴控制台:https://jsfiddle.net/hejdav/wxf51s5L/10/
你知道吗,为什么会这样?
答案 0 :(得分:1)
我相信你在这里过分思考。创建一个viewModel构造函数,初始化并传递您想要的数据,然后将其存储在observableArray中。
var ViewModel = function(r) {
// if r exists place it in the observable otherwise it's an empty array
this.items = ko.observableArray(r || []);
};
var model = new ViewModel([1, 2]);
ko.applyBindings(model);

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<p data-bind="foreach: items">
<span data-bind="text: $data"></span>
</p>
&#13;
答案 1 :(得分:0)
因为在您的HTML中,您有另一个文本绑定,删除该范围并解决您的问题。 或者你应该告诉Knockout你将自己控制后代绑定。 http://knockoutjs.com/documentation/custom-bindings-controlling-descendant-bindings.html
答案 2 :(得分:0)
为避免发生错误,请大声从{ controlsDescendantBindings: true }
返回init
,所以:
var foreachInit = ko.bindingHandlers.foreach.init;
ko.bindingHandlers.foreach.init = function () {
foreachInit.apply(this, arguments);
return {
controlsDescendantBindings: true
};
};
ko.applyBindings({
items: ['A', 'B'],
});