【发布时间】:2015-01-23 23:22:45
【问题描述】:
使用以下自定义绑定,我收到以下内容,但我不知道为什么。
版本 Knockout JavaScript 库 v3.2.0
您不能对同一个元素多次应用绑定。
绑定
ko.bindingHandlers.foreachArraySplice = {
init: function (element, valueAccessor, allBindings) {
var value = ko.unwrap(valueAccessor());
var columns = allBindings.get('columns') || 1;
/* Split the array into splices */
var len = value.length;
var splitArray = [];
var i = 0;
while (i < len) {
var size = Math.ceil((len - i) / columns--);
splitArray.push(value.slice(i, i + size));
i += size;
}
/*\Split the array into splices */
ko.cleanNode(element); // Last attempted fix...
ko.applyBindingsToNode(element, {
foreach: splitArray
});
}
};
用法
<div class="row" data-bind="foreachArraySplice: anArray, columns: 5">
<div class="col-md-2" data-bind="foreach: $data, css: { first: $index == 0, last: $index == $data.length }">
<div class="input-group" style="margin-bottom: 5px;">
<input class="form-control input-sm" type="text" data-bind="value: $data.key" readonly>
</div>
</div>
</div>
推理
简而言之,我需要获取一组对象(100 个)并将它们显示在页面上。我使用引导程序,所以我想我会制作一个绑定处理程序,该处理程序将数组接收并根据columns 绑定将其拼接成数组内的较小数组,并在我的视图中整齐地显示它们,如上所示。
数组总是变化的,所以我希望它尽可能是动态的,但是上面的代码在某个地方导致了上述错误。为简洁起见,我没有包含我的 viewModel,因为它是一个标准模型,其中包含一个包含对象的可观察数组。
【问题讨论】:
标签: knockout.js