我的问题如下:我尝试使用复选框绑定(bind)将对象数组绑定(bind)到选定对象的列表。我的问题是,我想将整个对象绑定(bind)到列表,如下所示:
<div data-bind="foreach: items">
<div>
<input type="checkbox" data-bind="checked: $parent.selectedItems, value: $data">
</div>
</div>
其中 items 是要绑定(bind)到 selectedItems 可观察数组的对象列表。
但是,要检查该值是否已“选中”,我想比较各个对象属性。这样做的原因是我从不同来源收集对象,有些代表同一对象,但它们并不完全相同。此外,我需要在其他函数中使用所选对象的某些子属性,因此我需要将整个对象绑定(bind)到可观察数组。
预先感谢您的任何建议!
最佳答案
如果您深入研究knockout api,您会发现当“checked”参数是一个数组时,绑定(bind)处理程序会确定该值是否在数组中,如下所示:
element.checked = ko.utils.arrayIndexOf(modelValue, checkedValue()) >= 0;
通常checkedValue()将被设置为选项中的项目,与'$data'具有相同的值:
var list = ko.observableArray({ value: "One" }, { value: "Two" });
var objectsInList = ko.observableArray(list[0]);
在像这样的选项绑定(bind)中,如果未指定checkedValue,$data 的值将是对象:
<select data-bind="options: list, checked: objectsInList">
我没有指定checkedValue,因此在checked绑定(bind)处理程序中它将根据对象引用执行arrayIndexOf()操作。
您想要执行的操作已在 knockout 文档中指定: http://knockoutjs.com/documentation/checked-binding.html
您可以在数据绑定(bind)参数中设置checkedValue,如下所示:
var list = ko.observableArray({ value: "One" }, { value: "Two" });
var objectsInList = ko.observableArray("One");
<select data-bind="options: list, checked: objectsInList, checkedValue: 'value'">
如果您想处理多个对象参数,我认为您需要编写自己的绑定(bind)处理程序。
关于javascript - knockout : How to use checked binding with observable array of whole objects, 但比较个别属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37483678/