2012-08-31 2 views
3

У меня возникла проблема с вычисленным наблюдаемым, создающим цепочку уведомлений из ада (Ordo n^2).Отключить вычисляемые наблюдаемые

Что мне нужно TODO это

Disable computed observable 
Do stuff 
Enable observable and notify subscribers (View) 

Нашел, но его более года,

http://www.knockmeout.net/2011/04/pausing-notifications-in-knockoutjs.html

Я надеялся, что есть некоторые сборки в растворе для этого сейчас?

Редактировать: скрипка, показывающая проблему. http://jsfiddle.net/8mxBA/

его довольно близко к реальному коду сайтов Try, чтобы выбрать все элементы с ТЭН верхним флажком будет только сделать два вызова к canSave вычисленного, пытается снять флажок, он будет делать п вызовы к canSave вычисленного и поскольку метод canSave повторяется во всей коллекции, он может замедляться.

+1

, возможно, потребуется еще несколько деталей или образец jsFiddle, чтобы обеспечить лучшую помощь, но статья выше делает до сих пор стоят. Дополнительные методы, которые могут помочь, - это расширитель «дроссельной заслонки»: http://knockoutjs.com/documentation/throttle-extender.html или взглянуть на плагин для отложенных обновлений Майкла Бест: https://github.com/mbest/knockout- deferred-updates –

+0

Спасибо за ответ, см. править – Anders

+0

Я думаю, что вы можете использовать идею «паузы», чтобы сделать эту работу. Вот обновленный пример: http://jsfiddle.net/rniemeyer/8mxBA/2/ –

ответ

1

Попробуйте вариант дроссельной заслонки («не удлинитель»).

comp = ko.computed(function() { 
    return stuff; 
}, this, {throttle: 1}); 

Я считаю, что расширитель дроссельной заслонки обертывает вычисляемые в дополнительном вычисленном так дешевле.

+1

'comp = ko.computed (function() { return stuff; }). Extend ({throttle: 1})' работал для меня. –

Смежные вопросы