Knockout: können wir eine Variable definieren, wenn wir in Knockoutjs die containerlose Kontrollflusssyntax verwenden?

Erstellt am 12. Juni 2013  ·  8Kommentare  ·  Quelle: knockout/knockout

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()); zu var innerContext = bindingContext.extend(valueAccessor); (übergeben Sie valueAccessor anstatt es zuerst aufzurufen).

Alle 8 Kommentare

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen