У меня есть собственный обработчик привязки, который я привязываю к сложному объекту в моей модели представления.
Обработчик привязки работает правильно, и функция update
вызывается при обновлении любого из свойств наблюдаемой. Однако функция update
вызывается для каждого обновленного свойства, что приводит к странному поведению, поскольку я полагаюсь на весь объект, который будет доступен и обновлен.
Я понимаю, почему это происходит, поскольку каждое свойство вызывает вызов обновления, и я думаю, что знаю, как это предотвратить - используя отложенные обновления функциональность Knockout.
Однако я не могу найти, как включить отложенные обновления только для наблюдаемого в моей пользовательской привязке. Я не хочу включать его в приложение, так как пишу привязку как библиотечную функцию.
Я пробовал много разных методов, включая:
Все, что не сработало.
Я не нашел другого обработчика привязки, который бы отдаленно приближался к такого рода функциям и пытался соединить его вместе с другими функциями.
Сам мой код привязки относительно прост: я беру связанный объект и просто разделяю параметры и передаю их экземпляру Code Mirror.
ko.bindingHandlers.editor = {
init: function(element, valueAccessor, allBindingsAccessor) {
var observableValue = ko.utils.unwrap(valueAccessor());
initEditor(element, observableValue, allBindingsAccessor);
},
update: function(element, valueAccessor, allBindingsAccessor) {
var observableValue = ko.unwrap(valueAccessor());
createEditor(codeEditorDiv, observableValue);
resize();
updateEditor(element, observableValue, allBindingsAccessor);
}
};
И мой HTML-код:
<div id="editor" data-bind="editor: EditorVM"></div>
Я использую Dotnetify для ViewModel, так что это разумный сложный класс C #, но достаточно сказать, что привязка работает и обновляется, но мне нужно, чтобы он вызывал «update» только один раз свойства были обновлены.