Как можно правильно распоряжаться виджетами в версии 2.0? Из того, что я прочитал, это, как предполагается, автоматически выполняется при удалении из DOM, но удаление моего виджета из DOM с помощью say jQuery.remove() не вызывает вызванное canDeactivate() или деактивировать(). Есть ли какой-то конкретный способ его удаления из DOM для вызывающих вызовов деактивации?Durandal 2.0 Widget Disposal
ответ
Да, на самом деле есть, и это легко пропустить, потому что оно не задокументировано очень хорошо.
Knockout имеет служебную функцию ko.utils.domNodeDisposal.addDisposeCallback(element, callback)
. Эта функция гарантирует, что обратный вызов будет вызван, когда элемент будет удален. Однако «утилизация» в этом случае очень специфична. jQuery.remove()
не запускает его. Способ удаления узла состоит в использовании ko.removeNode(element)
, который не только удаляет элемент DOM (и его дочерние элементы), но также выполняет некоторую дополнительную очистку в терминах обработчиков связанных событий и т. Д. (Извините, детали немного туманны. Вы можете всегда проверять реализацию Knockout, если хотите получить более подробную информацию об этом.)
Внутренне, при удалении зрения, Дюрандал использует ko.removeNode
. Поэтому, когда представление удалено, все элементы также удаляются, и любые вызовы disposeCallbacks, созданные с использованием вышеупомянутой функции полезности, будут вызываться. Я уверен, что Durandal перехватывает этот процесс, чтобы вызвать обратный вызов для деактивации.
TL; DR: попробуйте ko.removeNode(element)
вместо jQuery.remove(element)
. Это вызовет ваш деактивирующий обратный вызов.
- 1. Durandal widget timing issue
- 2. Durandal Widget с несколькими видами
- 3. Durandal 2.0 Dialog Repositioning
- 4. Выпадающее меню в Durandal 2.0
- 5. Доступ к маршрутизатору Durandal 2.0
- 6. Yii 2.0 Widget варианты элементов
- 7. JFace FontRegistry Font Disposal
- 8. ServiceStack - IOC Disposal
- 9. LINQ Datacontext Disposal Issues
- 10. Durandal 2.0 Router - как указать идентификатор?
- 11. привязка данных durandal widget и обновление с помощью ajax
- 12. Durandal 2.0 shell.js не работает во всех представлениях
- 13. Durandal плагины не загружаются
- 14. «jQuery не определен» при обновлении с Durandal 1.2 до 2.0
- 15. Привязки применяются только один раз с Durandal 2.0
- 16. Durandal Вложенная композиция вида
- 17. динамически добавить виджет durandal
- 18. Оптимизация Durandal 1.2 Project
- 19. «Обновление» JQuery widget widget
- 20. Табличные «слайд вниз» при использовании в Widget 2.0
- 21. Durandal Composition
- 22. Диалог Durandal
- 23. Как вернуть значения виджета Durandal?
- 24. durandal typescript bootloader
- 25. Как создать многократные виджеты Durandal
- 26. Несколько стартовых страниц в Durandal
- 27. Показать виджет с использованием диалогового окна Durandal
- 28. Ninject Transient Scope + Scope Disposal + Garbage Collection + Memory Leak
- 29. Оптимизация Durandal с Gulp и Gulp-Durandal не работает
- 30. Durandal view добавляет «.js» к filename
Я нашел документацию нокаута для всех, кроме своей привязки, чтобы быть светом на деталях. Даже поиск ko.removeNode не дает мне результата поиска в официальных документах. Во всяком случае, спасибо за ответ. Роб Эйзенберг также ответил на мой пост в Durandals Google Group. Использование ko.removeNode (element) действительно дает мне желаемое поведение. –