Как остановить привязки привязки knockout.js к дочерним элементам
Используя нокаут, когда вы вызываете ko.applyBinding(viewModel, "divId")
, он рекурсивно связывается с дочерними элементами элемента, к которому вы привязались ( "divId" ). Я хотел бы прекратить эту оценку у ребенка node. Есть ли способ сделать это?
причина, почему...
Я хотел бы привязать всю страницу к модели просмотра навигации, это будет обрабатывать основные макеты и... навигация.... На разных страницах я хотел бы привязать определенные регионы к различным моделям просмотров, которые не являются свойствами модели навигационного представления. На данный момент, если я это сделаю, я получаю ошибки "невозможно разобрать привязку", поскольку модель навигационного представления не обладает требуемыми свойствами. Если бы я мог остановить привязку, идущую вниз по дому, я мог бы просто привязать эти предметы отдельно.
Ответы
Ответ 1
Есть несколько способов, которыми вы можете воспользоваться этим. Как правило, вы добавляете несколько моделей "под" в модель основного вида, а затем используйте привязку with
для различных областей с фактическими моделями просмотра для привязки к ним.
Можно технически делать то, что вам нужно. Вы можете создать пользовательскую привязку, которая сообщает KO, что она будет обрабатывать привязку самих детей. Это будет выглядеть так:
ko.bindingHandlers.stopBindings = {
init: function() {
return { controlsDescendantBindings: true };
}
};
Когда вы поместите это на элемент, KO будет игнорировать детей. Затем вы можете вызвать ko.applyBindings для дочернего элемента этого элемента с другой моделью просмотра.
Пример: http://jsfiddle.net/rniemeyer/tWJxh/
Как правило, при использовании привязки with
вы должны использовать несколько моделей представлений под основной моделью просмотра.
Ответ 2
Один из способов сделать это - создать раздел для навигации (или просто a) и связать с ним navVM. Затем создайте еще один раздел для контента и привяжите его к нему. Таким образом, нет конфликта, и все его очень разделенные.
<body>
<div id="navSection">
</div>
<div id="contentSection">
</div>
</body>
Затем сделайте ko.applyBinding(navVM, "navSection" ) и ko.applyBinding(contentVM, "contentSection" )