J’utilise KnockoutJS et j’ai une vue principale et un modèle de vue. Je souhaite qu’une boîte de dialog (l’interface utilisateur jQuery) s’ouvre avec une autre vue à laquelle un modèle de vue enfant séparé doit être lié.
Le HTML pour le contenu du dialog est récupéré à l’aide d’AJAX, je veux donc pouvoir appeler ko.applyBindings
une fois la requête terminée, et je veux lier le modèle de vue enfant à la partie du HTML chargée via ajax dans la boîte de dialog .
Est-ce vraiment possible ou dois-je charger TOUTES mes vues et afficher les modèles lorsque la page est initialement ko.applyBindings
puis appeler une fois ko.applyBindings
?
ko.applyBindings
accepte un second paramètre qui est un élément DOM à utiliser comme racine.
Cela vous permettrait de faire quelque chose comme:
Vous pouvez donc utiliser cette technique pour lier un viewModel au contenu dynamic que vous chargez dans votre boîte de dialog. Dans l’ensemble, vous voulez juste faire attention à ne pas appeler plusieurs fois applyBindings
sur les mêmes éléments, car vous obtiendrez plusieurs gestionnaires d’événements attachés.
Bien que la réponse de Niemeyer soit une réponse plus correcte à la question, vous pouvez également procéder comme suit:
Cela signifie que vous n’avez pas besoin de spécifier l’élément DOM et que vous pouvez même lier plusieurs modèles au même élément, comme ceci:
J’ai réussi à lier un modèle personnalisé à un élément lors de l’exécution. Le code est ici: http://jsfiddle.net/ZiglioNZ/tzD4T/457/
Le point intéressant est que j’applique l’atsortingbut data-bind à un élément que je n’ai pas défini:
var handle = slider.slider().find(".ui-slider-handle").first(); $(handle).attr("data-bind", "tooltip: viewModel.value"); ko.applyBindings(viewModel.value, $(handle)[0]);
Vous devriez regarder le with
liaison, ainsi que controlsDescendantBindings
http://knockoutjs.com/documentation/custom-bindings-controlling-descendant-bindings.html