javascript - knockout : How to use checked binding with observable array of whole objects, 但比较个别属性?

标签 javascript arrays mvvm knockout.js observable

我的问题如下:我尝试使用复选框绑定(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/

相关文章:

python - 为什么将列表元素分配给变量在这里以不同的方式工作?

entity-framework - 如何让 Entity Framework 和 MVVM 很好地协同工作?

WPF - MVVM - 查看模型层次结构

javascript - eval函数的目的是什么?

javascript - 使用类而不是 ID 发布 ajax 数据

javascript - 使用转义键取消内联 tinyMCE 编辑

c# - 使用 MVVM 撤消/重做最佳实践

javascript - 如何在 JSTree 上捕获 focusIn 和 focusOut 事件

python - python中的命名字典

javascript - 有没有办法在 TypeScript 中动态应用数组映射器?