通过索引将元素分配给knockout.js observableArray的正确方法是什么?

rec*_*ive 3 ko.observablearray knockout.js

我一直在查看淘汰赛的文档observableArray,我很难弄清楚如何使用数组做一些最基本的事情:通过索引分配一个值.

我试过的事情:(给定oa = ko.observableArray([1,2,3]))

  • oa(1, 10);
  • oa[1] = 10;
  • oa()[1] = 10;
  • oa.splice(1, 1, 10);

最后一个似乎有效,但我担心这.splice()可能效率低下,因为它必须关注转移所有后续值.我更喜欢做简单的基于索引的分配.

创建了一个显示observableArray很奇怪的jsfiddle.

<ol data-bind="foreach: list">
    <li data-bind="text: $data"></li>
</ol>

<script>
    var model = {
        list: ko.observableArray([3, 5, 7])
    };

    ko.applyBindings(model);

    setTimeout(function() {
        model.list()[1] = 55;
        model.list.push(99);
        model.list()[2] = 77;
    }, 2000);
</script>
Run Code Online (Sandbox Code Playgroud)

pas*_*lus 6

修改后在您的observable上应用valueHasMutated属性

setTimeout(function() {
    model.list()[1] = 55;
    model.list.push(99);
    model.list()[2] = 77;
    model.list.valueHasMutated();
}, 2000);
Run Code Online (Sandbox Code Playgroud)