Нокаут: как проверить, были ли привязки применены к области страницы
Есть ли способ проверить, был ли вызов applyBindings для области страницы или нет?
Кажется, нокауту не нравится, когда applyBindings вызывается на одной странице более одного раза.
Ответ 1
Нокаут 2.0 имеет две функции, которые вы могли бы использовать для этой цели. ko.dataFor и ko.contextFor возьмите node и верните либо данные Knockout, которые будут доступны для привязки в этой области (dataFor), или весь контекст связывания в этой области (contextFor), который включает $data, $parent, $parents и $root.
Итак, вы можете сделать что-то вроде:
var isBound = function(id) {
return !!ko.dataFor(document.getElementById(id));
};
Однако, в обычном сценарии вы должны действительно называть ko.applyBindings один раз на своей странице. Это зависит от того, что вы пытаетесь выполнить. Взгляните на этот ответ за некоторыми предложениями о способах управления несколькими моделями просмотров: Пример шаблона knockoutjs для приложений с несколькими просмотрами.
Как правило, вы делаете <div data-bind="with: mySubModel"> и когда заполняется mySubModel, тогда эта область появится и будет привязана.