Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
vm.symbolsLength=function(){
alert(1);
return vm.symbols().length;
}; ko.recompute=function(callback){
callback.__ko_proto__=ko.observable;
return callback
}
vm.symbolsLength=ko.recompute(function(){
alert(1);
return vm.symbols().length;
});
vm.x1=ko.recompute(function(){
return vm.symbolsLength()+'x1';
});
vm.x2=ko.recompute(function(){
return vm.symbolsLength()+'x2';
});
ko.recompute=function(callback){
var c;
function create(){
c = ko.computed({
read: callback,
deferEvaluation:true,
disposeWhen:function(){
return (c.getSubscriptionsCount()==0)&& setTimeout(create,0);
}
});
}
create();
function read(){
return c();
}
read.__ko_proto__=ko.observable;
return read;
};
1. Насчет POJO — это не совсем верно, поскольку в контроллер нам подсовывают клон объекта с предыдущей итерации.
И кстати эти контроллеры в глобальном пространстве имен выглядят подозрительно. Надеюсь, их можно спрятать.
Насчет того что множественное обновление массива вызывает обновление UI на каждой итерации… Что в Angular на этот счет?
В общем я думаю подход Angular vs Knockout это тема скорее для холивара. Потому что объективных преимуществ нет ни у того ни у другого.
Дык он на следующем тике все обновит, делая «dirty check». В этом же и фишка. В текущем тике можно менять хоть 1000 раз — ни чего не произойдет.
Как такое сделать в Knockout кстати?
ko.extenders.async = function(target, timeout) {
target['throttleEvaluation'] = timeout;
return target;
};
Но если у меня в scope массив и я сделаю в него push, я же изменю массив в прототипе, и вся магия развалится.
Оптимизация knockoutjs при динамическом добавлении и удалении темплейтов