knockout - 在多选下拉列表中预选数据

时间:2014-07-03 11:44:50

标签: knockout.js

我有一个IndustryData可观察数组,它将以下列格式存储数据:

ID Name IsMapped 
1 Name1 0
2 Name2 1
3 Name3 0
4 Name4 1

我使用下面提到的select绑定数据:

<select class="form-control" data-bind="options: $root.IndustryData, selectedOptions: $root.IndustryDataSelectedValues, optionsText: 'name', optionsValue: 'id'" multiple="multiple"></select>

IndustryDataSelectedValues是一个可观察的数组,它将存储上述select的选定值,并且它最初将为空。我的要求是应该在我的IsMapped控件中选择multi select值为1的行,并且这些项应该在IndustryDataSelectedValues可观察数组中可用。在上述情况下,应在我的Name2控件中选择Name4multi select,这两个项目应在IndustryDataSelectedValues可观察数组中可用。

如何在淘汰赛中实现这一目标?

1 个答案:

答案 0 :(得分:1)

有多种方法可以解决这个问题:

  • 你可以有一个可写的计算器,它可以映射到你的IndustryDataSelectedValues
  • 或者,如果您只需要在视图模型上使用initialize方法来初始化数组,那么当数据在IndustryData
  • 中准备就绪时,您调用的是什么

所以你需要这样的东西:

initialize: function () {
        this.IndustryDataSelectedValues(ko.utils.arrayMap(
        ko.utils.arrayFilter(this.IndustryData, function (item) {
            return item.IsMapped == 1
        }), function (item) {
            return item.id;
        }));
    }

演示JSFiddle

ko.utils.arrayFilter的情况下,您首先选择IsMapped == 1所有项目,然后使用ko.utils.arrayMap选择之前找到的项目的id属性并将这些ID存储在IndustryDataSelectedValues