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

Нокаут: как проверить, были ли привязки применены к области страницы

Есть ли способ проверить, был ли вызов applyBindings для области страницы или нет?

Кажется, нокауту не нравится, когда applyBindings вызывается на одной странице более одного раза.

4b9b3361

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

Вот пример: http://jsfiddle.net/rniemeyer/GaqGY/

Однако, в обычном сценарии вы должны действительно называть ko.applyBindings один раз на своей странице. Это зависит от того, что вы пытаетесь выполнить. Взгляните на этот ответ за некоторыми предложениями о способах управления несколькими моделями просмотров: Пример шаблона knockoutjs для приложений с несколькими просмотрами.

Как правило, вы делаете <div data-bind="with: mySubModel"> и когда заполняется mySubModel, тогда эта область появится и будет привязана.