Подтвердить что ты не робот

Как остановить привязки привязки knockout.js к дочерним элементам

Используя нокаут, когда вы вызываете ko.applyBinding(viewModel, "divId"), он рекурсивно связывается с дочерними элементами элемента, к которому вы привязались ( "divId" ). Я хотел бы прекратить эту оценку у ребенка node. Есть ли способ сделать это?

причина, почему...

Я хотел бы привязать всю страницу к модели просмотра навигации, это будет обрабатывать основные макеты и... навигация.... На разных страницах я хотел бы привязать определенные регионы к различным моделям просмотров, которые не являются свойствами модели навигационного представления. На данный момент, если я это сделаю, я получаю ошибки "невозможно разобрать привязку", поскольку модель навигационного представления не обладает требуемыми свойствами. Если бы я мог остановить привязку, идущую вниз по дому, я мог бы просто привязать эти предметы отдельно.

4b9b3361

Ответ 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" )