淘汰赛观察阵容

时间:2011-11-02 13:13:08

标签: javascript performance knockout.js

如何一次性将所有值添加到observableArray?在我的情况下,在循环中添加值非常慢。这是jsfiddle的例子。 jsfiddle

3 个答案:

答案 0 :(得分:16)

var myArray = ko.observableArray([]);
var valuesToInsert = [1,2,3];
myArray.push.apply(myArray, valuesToInsert);

就是这样

答案 1 :(得分:8)

由于您正在清除整个可观察数组,因此可以通过以下方式实现:

var viewModel = {
    name: "base",   
    addingValue:new ko.observable(),
    someArr: new ko.observableArray(["123","432","sdafasd","xrere"]),
    add: function()
    {
        this.someArr.push(this.addingValue());
    },
    updateSomeArr:function()
    {
        var temp = [];

        for(var i=0;i<5;i++)
        {
            temp.push("555565");
        }

        this.someArr(temp);
    }
}

答案 2 :(得分:3)

已经有一个选定的答案,但我认为以下内容会有所帮助。您可以通过执行可观察数组来禁用观察行为以获取底层数组实现:

var underlyingArray = viewModel.someArr();

然后,您可以将项目添加到underlyingArray,而不会触发someArr个事件。完成添加项目后,请致电:

viewModel.someArr.valueHasMutated();

这将导致事件触发通知所有依赖于viewModel.someArr()的可观察对象。