代码之家  ›  专栏  ›  技术社区  ›  user6621897

更新淘汰可观察数组无法更新kendo multi-select控件

  •  0
  • user6621897  · 技术社区  · 8 年前

    HTML格式

    <select id ="multiSelect" data-bind="options: choices, selectedOptions:   selectedChoice">
    </select>
    Selected: <strong data-bind="text: selectedChoice"> </strong>
    

    var ViewModel = function() {
       this.choices = ko.observableArray(["apple", "orange", "banana"]);
       this.selectedChoice = ko.observableArray();
    };
    
    var vm = new ViewModel()
    ko.applyBindings(vm);
    vm.choices.push("watermelon");
    $("#multiSelect").kendoMultiSelect().data("kendoMultiSelect");
    vm.choices.push("strawberry");
    

    我对击倒装订有些陌生。谁能解释一下为什么草莓没有出现在多选项下拉框中?

    这里是jsfiddle:

    http://jsfiddle.net/he0xx93s/3/

    1 回复  |  直到 8 年前
        1
  •  1
  •   Community CDub    8 年前

    Kendo的MultiSelect不会监听敲除可见对象所做的更改。

    作为一种解决方法,您可以在每次阵列更改时显式更新kendo MultiSelect的dataSource。

    以下是方法 to subscribe to a change.

    所以主要思想应该是这样的:

    vm.choices.subscribe(function(changes) {
    
        var ms = $("#multiSelect").data("kendoMultiSelect");
    
        changes.forEach(function(change) {
            if (change.status === 'added') {
    
                ms.dataSource.push(change.value);
            }
        });
    
    }, null, "arrayChange");
    

    类似地,您可以使用 remove dataSource的方法。

    或者在更新时,您可以获取特定项目(如第三个项目)并使用 set 剑道观察法。

    dataSource.data()[3].set('someProperty', newValue);