обновление наблюдаемого внутри модели, но без запуска связанных событий модели в нокауте

привет, у меня есть модель в нокауте, удерживаемая переменной:

var knockoutObject = knockoutObservable;

если я сделаю это:

knockoutObject(newValue);

он запускает события привязки для Knockout (?), И пользовательский интерфейс обновляется. Как я могу обновить значение KnockoutObservable, не затрагивая весь экран? другими словами: обновление значения модели, но не обновление пользовательского интерфейса.

Я знаю, что это немного странно, потому что это дело с MVVM, но мне это нужно для определенного сценария...

редактировать: что я пытаюсь сделать: у меня есть несколько jsTrees на экране. они привязаны к модели. когда я обновляю определенный наблюдаемый объект в модели, все деревья перерисовываются и закрываются до состояния по умолчанию. это дает мне плохой пользовательский интерфейс
, поэтому, поскольку пользовательский интерфейс уже обновлен с правильными значениями, когда я изменяю значение в дереве (именно так я его построил), мне не нужно нокаутировать для повторного рендеринга деревьев. только стоимость модели.

у меня есть собственный обработчик привязки для деревьев:

ko.bindingHandlers.Tree

Спасибо


person guy schaller    schedule 27.06.2012    source источник


Ответы (1)


Вы можете использовать throttle для задержки выполнения, но вы, вероятно, захотите подойти ко всей проблеме иначе. Получив больше информации о том, что вы пытаетесь решить, мы, вероятно, сможем предложить лучшую альтернативу.

ОБНОВЛЕНИЕ (из комментариев):

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

Если вы не можете этого сделать, посмотрите, можете ли вы кэшировать состояние в привязке и воссоздать jsTree с предыдущим состоянием.

person daedalus28    schedule 27.06.2012
comment
Не лучше ли было бы просто изменить обновление вашей пользовательской привязки, чтобы просто не сворачивать деревья? - person daedalus28; 27.06.2012
comment
это не сворачивание деревьев.. это снова рендеринг плагина jsTree.. который по умолчанию свернут. Я не могу сказать, чтобы он просто не отображал плагин, потому что иногда он мне тоже нужен ... только этот сценарий я не - person guy schaller; 27.06.2012
comment
В идеале привязка не должна воссоздавать плагин jsTree, а просто изменять его внутренние компоненты. Если вы не можете этого сделать, посмотрите, можете ли вы кэшировать состояние в привязке и воссоздать jsTree с предыдущим состоянием. - person daedalus28; 27.06.2012
comment
я бы. но это означает, что нужно пройтись по всем деревьям на экране... для меня это плохой вариант... сохранить несколько состояний (не знаю, сколько их динамических), а затем воссоздать их. не очень весело... :) - person guy schaller; 27.06.2012
comment
Можете ли вы опубликовать jsfiddle с вашим сценарием? Вам не нужно обновлять весь код деревьев — только привязку, которую вы создаете. - person daedalus28; 27.06.2012
comment
ОК, поэтому я решил это в этом подходе: в идеале привязка не должна воссоздавать плагин jsTree в моей пользовательской привязке. Я проверяю, содержит ли элемент уже jsTree, если да, я не буду его воссоздавать. просто обновите данные, которые мне нужно обновить, используя методы jsTree. Спасибо за помощь - person guy schaller; 03.07.2012
comment
нет, потому что это не то, что решило это. не могли бы вы отредактировать ответ или написать новый, который в основном говорит о том, что сказал ваш комментарий, а затем плохо пометить его как ответ? - person guy schaller; 05.07.2012