简体   繁体   English

淘汰赛观察阵容

[英]knockout observableArray performance

How to add all values to observableArray in one time? 如何一次性将所有值添加到observableArray Adding values in loop works very slow in my case. 在我的情况下,在循环中添加值非常慢。 Here is jsfiddle example. 这是jsfiddle的例子。 jsfiddle 的jsfiddle

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

that's it 而已

Since you're clearing out the entire observable array, one way you can accomplish this is: 由于您正在清除整个可观察数组,因此您可以通过以下方式实现:

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);
    }
}

There is already a selected answer, but I thought that the following would help. 已经有一个选定的答案,但我认为以下内容会有所帮助。 You can disable the observing behavior by executing your observable array to get the underlying array implementation: 您可以通过执行可观察数组来禁用观察行为以获取底层数组实现:

var underlyingArray = viewModel.someArr();

You can then add items to underlyingArray without firing off someArr events. 然后,您可以在不触发someArr事件的情况下将项添加到underlyingArray Once you're done adding items, call: 完成添加项目后,请致电:

viewModel.someArr.valueHasMutated();

This will cause the event to fire notifying all observables dependent on viewModel.someArr(). 这将导致事件触发通知依赖于viewModel.someArr()的所有可观察对象。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM