web-dev-qa-db-fra.com

Knockout: comment vérifier si des liaisons ont été appliquées à la zone de page

Existe-t-il un moyen de vérifier si applyBindings a été appelé ou non pour une zone de page?

Il semble que knockout n'aime pas que applyBindings soit appelé plusieurs fois sur la même page.

40
Chin

Knockout 2.0 a deux fonctions que vous pouvez utiliser à cet effet. ko.dataFor et ko.contextFor prendre un nœud et renvoyer les données Knockout qui seraient disponibles pour la liaison à cette étendue (dataFor) ou le contexte de liaison entier à cette étendue (contextFor), qui comprend $data, $parent, $parents, et $root.

Vous pouvez donc faire quelque chose comme:

var isBound = function(id) {
  return !!ko.dataFor(document.getElementById(id));
};

Voici un exemple: http://jsfiddle.net/rniemeyer/GaqGY/

Cependant, dans un scénario normal, vous devriez vraiment chercher à appeler ko.applyBindings une seule fois sur votre page. Cela dépend cependant de ce que vous essayez d'accomplir. Jetez un oeil à cette réponse pour quelques suggestions sur la façon de gérer plusieurs modèles de vue: Exemple de modèle knockoutjs pour les applications multi-vues .

En règle générale, vous feriez un <div data-bind="with: mySubModel"> et lorsque mySubModel est renseigné, cette zone apparaît et est liée.

60
RP Niemeyer