Заменить все элементы в Knockout.js observableArray

У меня есть observableArray в моей модели просмотра. После создания виртуальной машины я хочу полностью заменить данные observableArray. Вот как я это делаю:

//Initial Setup
var vm = {};
vm.roles = ko.observableArray([]);
ko.applyBindings(vm); 


//....replace array later on....
vm.roles(["1", "2"]);

Кажется, это работает нормально, но я был обеспокоен тем, что это было неправильно и могло привести к утечке памяти. Может ли кто-нибудь подтвердить, что это предпочтительный способ обновления существующего observableArray, предполагая, что вы хотите заменить все его данные?

Я заметил, что у observableArray есть метод removeAll(), и задался вопросом, нужно ли его вызывать, чтобы сделать это чисто, или меня устраивает то, что я делаю?


person C.J.    schedule 15.03.2012    source источник


Ответы (2)


Используемый вами метод является рекомендуемым подходом для полной замены данных в файле observableArray. observableArray на самом деле является обычным observable с дополнительными функциями, добавленными для полезных операций с массивами, которые воздействуют на базовый массив и запускают уведомления.

person RP Niemeyer    schedule 15.03.2012
comment
Когда вы говорите о рекомендуемом подходе, вступает в действие мое обучение ответам на вопросы на skeptics.stackexchange.com. У вас есть подтверждающая документация/ссылки? за ваше заявление? [с уважением, конечно; ты сам мистер Кнокмаут (О; ] - person Kristopher; 11.08.2014

Я обнаружил, что рекомендуемый подход не работает в IE9 и более ранних версиях. Вместо этого я воссоздал объект,

vm.roles = ko.observableArray(["1","2"])
person user887    schedule 19.09.2013
comment
Интересно, изменилось ли это с более новыми версиями Knockout... Какую версию вы использовали? - person Tyson Nero; 11.10.2013
comment
Если вы замените весь объект, наблюдатели не будут уведомлены, верно? - person Edward Brey; 23.12.2013