Lassen Sie uns einen Blick Modell wie die Verwendung von Knockout betrachten:Knockout JS Aufruf einer Ansichtsmodell Funktion innerhalb einer foreach
Mit dieser Ansicht:
<ul data-bind="foreach: items">
<li><span data-bind="text: id"></span>
<span data-bind="visible: $root.showName(name)">Yes! show the name</span>
<a href="#" data-bind="click: $root.removePerson">Remove</a>
</li>
</ul>
Sie es hier in Aktion sehen können: http://jsfiddle.net/SmW35/8/
In diesem Fall, wenn jemand die „entfernen“ -Link, und KO ruft die Funktion showname, das Objekt „diese“ innerhalb der Funktion klickt, es ist ein Objekt mit dem aktuellen Element, zum Beispiel, wenn ich auf "Entfernen" in Punkt 2 klicke, ist "das" {ID: 2, Name: ""} Wenn jedoch KO das "Sichtbare" bindet und den showName aufruft Funktion, das Objekt "this" enthält nicht das aktuelle Element, und Sie müssen "name" an die Funktion übergeben (oder Sie könnten die $ data verwenden).
Also, ich habe 2 Fragen:
- Es gibt einen Weg, um die showname Funktion aus der Sicht aufrufen, ohne den Namen oder $ Daten übergeben (ein ähnliches Verhalten als mit dem Link Entfernen)
- Wenn nicht ist da etwas nicht in Ordnung? Ich habe eine interessante Diskussion mit einem Arbeitskollegen, der denkt, dass das nicht richtig ist, weil Sie Daten aus der Ansicht senden ($ root.showName (name)), und dann ist das kein "reines" MVVM-Muster. Er schlägt vor, eine benutzerdefinierte KO-Bindung zu erstellen, um die Funktionalität zu erreichen. Meiner Meinung nach fliegen Fliegen mit einem Panzer, aber ich bin sehr neugierig, ob es einen anderen Weg gibt oder du denkst auch, dass ich kein reines MVVM-Muster mit meinem Code mache.
aus interesse warum würden sie den name span verstecken aber lassen sie die taste sichtbar. Wenn Sie beide ausblenden möchten, gibt es eine andere Lösung, die Luis beschreibt unter –
@RobertSlaney die Schaltfläche zum Entfernen ist nur da, um zu helfen, zu verstehen, was ich gefragt habe. Es gibt keine Schaltfläche zum Entfernen in meinem Projekt, und der ShowName ist für andere Zwecke (aber genau die gleiche Einfachheit). Vielen Dank! –