Заменить все элементы в Knockout.js observableArray - PullRequest
44 голосов
/ 15 марта 2012

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

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


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

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

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

Ответы [ 2 ]

41 голосов
/ 15 марта 2012

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

0 голосов
/ 19 сентября 2013

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

vm.roles = ko.observableArray(["1","2"])
...