2016-04-27 2 views
4

Betrachten Sie das folgende Beispiel:Kann ich eine Liste der Elemente erhalten, die derzeit durch Knockout gebunden sind?

ko.applyBindings(viewModel, document.getElementById('id')); 

Gibt es eine Liste über mit einiger Art und Weise Knockout bekommen von „Bindungen angewandt?“ Ich frage, weil ich eine Situation, wo ich die gefürchtete bin immer:

Uncaught Error: You cannot apply bindings multiple times to the same element. 

Nun ist es ziemlich offensichtlich, was der Fehler bedeutet. Wie auch immer wir arbeiten, laden wir eine Ansicht über Ajax auf die Seite und verwenden die $(id).html(data), um die Seite mit der besagten Ansicht zu füllen, und nach der Verwendung benötigen wir js, um die Ansicht zu laden und dann die Bindungen anzuwenden.

Jetzt funktioniert das, bis wir zu einem anderen Widget navigieren, das, je nachdem, wie wir Dinge tun, die aktuelle Ansicht ersetzen und das Modell (Bindung) auf der Seite anzeigen soll. Hier bekomme ich den Fehler.

Gibt es also eine Möglichkeit, eine aktuelle Liste von "angewandten Bindungen" in Knockout zu sehen, wenn versucht wird, ein Ansichtsmodell an ein Element zu binden?

Antwort

1

Es gibt eine Methode für ein einzelnes Element: ko.contextFor. Es könnte wie folgt verwendet werden:

console.log(ko.contextFor(document.getElementById("a"))); 
 
console.log(ko.contextFor(document.getElementById("b"))); 
 
ko.applyBindings({}, document.getElementById("a")); 
 
console.log(ko.contextFor(document.getElementById("a"))); // Only this shows data 
 
console.log(ko.contextFor(document.getElementById("b")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-debug.js"></script> 
 

 
<div id="a"></div> 
 
<div id="b"></div>

Um es für alle DOM-Knoten zu erhalten würden Sie iterieren haben/Traverse den Knoten selbst denke ich, aber das sollte nicht sein, hart.

Auch: vergessen Sie nicht, dass Knockout Open Source ist, und eine unminifizierte Version verfügbar ist. Sie können den Fehler fangen, wie es geworfen wird, und in diesem Zusammenhang prüfen, was los ist:

debug session demo

Verwandte Themen