нокаутируемое исполнение Array - PullRequest
8 голосов
/ 02 ноября 2011

Как добавить все значения к observableArray за один раз?Добавление значений в цикле работает очень медленно в моем случае.Вот пример jsfiddle. jsfiddle

Ответы [ 3 ]

16 голосов
/ 12 мая 2012
var myArray = ko.observableArray([]);
var valuesToInsert = [1,2,3];
myArray.push.apply(myArray, valuesToInsert);

Вот и все

8 голосов
/ 02 ноября 2011

Поскольку вы очищаете весь наблюдаемый массив, вы можете сделать это одним из следующих способов:

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);
    }
}
3 голосов
/ 13 декабря 2011

Уже есть выбранный ответ, но я подумал, что поможет следующее.Вы можете отключить поведение наблюдения, выполнив свой наблюдаемый массив, чтобы получить базовую реализацию массива:

var underlyingArray = viewModel.someArr();

Затем вы можете добавлять элементы в underlyingArray, не вызывая события someArr.Как только вы закончите добавлять элементы, позвоните:

viewModel.someArr.valueHasMutated();

. Это приведет к тому, что событие сработает, уведомляя все наблюдаемые объекты, зависящие от viewModel.someArr ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...