Ich bin mir nicht sicher, wonach genau Sie fragen, aber wenn Sie die Verwendung der foreach
Bindung meinen, dann können Sie:
<!-- ko foreach: { data: people, as: 'person' } -->
<span data-bind='text: person.name'></span>
<!-- /ko -->
Ich will das:
<!-- ko foreach: { data: people, as: 'person' } -->
<!-- ko var strName = person.name } -->
(Ich möchte dies, wie man es erreicht, ich möchte den Wert in eine Variable setzen und weiter unten verwenden)
<!-- ko if: strName == person.name } -->
<span data-bind='text: person.name'></span>
<!-- /ko -->
Hier ist eine Bindung, die ich verwende:
ko.bindingHandlers['let'] = {
'init': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
// Make a modified binding context, with extra properties, and apply it to descendant elements
var innerContext = bindingContext.extend(valueAccessor);
ko.applyBindingsToDescendants(innerContext, element);
return { controlsDescendantBindings: true };
}
};
ko.virtualElements.allowedBindings['let'] = true;
Sie können es dann so verwenden:
<!-- ko let: { strName: person.name } -->
...
<!-- ko if: strName === person.name -->
<span data-bind='text: person.name'></span>
<!-- /ko -->
...
<!-- /ko -->
Super, genau das habe ich gesucht!
@mbest kann diese Bindung für Knockout 3.4+ implementiert werden? Ich habe mehrere Probleme damit gesehen, als ich versuchte, es in einer echten Anwendung zu verwenden (insbesondere wurde die Variable in einigen Fällen nicht aktualisiert).
Es wird in 3.5.0 enthalten sein, wann immer wir es schaffen. Ich habe gerade den obigen Kommentar aktualisiert, um die neueste Version zu verwenden. Die Änderung war von var innerContext = bindingContext.extend(valueAccessor());
zu var innerContext = bindingContext.extend(valueAccessor);
(übergeben Sie valueAccessor
anstatt es zuerst aufzurufen).
@mbest Super , danke für die schnelle Antwort! Ich versuche es in Kürze zu testen.
@mbest Nur zur
Hilfreichster Kommentar
Es wird in 3.5.0 enthalten sein, wann immer wir es schaffen. Ich habe gerade den obigen Kommentar aktualisiert, um die neueste Version zu verwenden. Die Änderung war von
var innerContext = bindingContext.extend(valueAccessor());
zuvar innerContext = bindingContext.extend(valueAccessor);
(übergeben SievalueAccessor
anstatt es zuerst aufzurufen).