Wir haben Aurelia aufgerüstet (insbesondere aurelia-framework
auf 1.0.6
, aurelia-bindong
auf 1.0.3
) und jetzt sehen wir uns mit einigen verbindlichen Problemen konfrontiert.
Es gibt eine Liste von Elementen mit berechneten Klassen, und wir hatten eine Methode in dem benutzerdefinierten Element, das die Liste enthielt:
%Vor% Und class.one-way="$parent.getClass(t)"
für das Listenelement, alles war in Ordnung.
Nach dem Upgrade hat es einfach aufgehört zu arbeiten. Wenn also die Eigenschaften selected
(btw ist bindbar) oder currentTag
geändert wurden, wurde die Methode getClass
gerade nicht aufgerufen.
Ich habe das teilweise gelöst, indem ich diese Logik in die Ansicht verschoben habe:
%Vor% Ich weiß, dass das gut aussieht ... schlecht, aber das hat t === $parent.currentTag
funktioniert, aber die disabled-option
-Klasse wird immer noch nicht angewendet.
Die Frage ist also:
Ich verstehe, dass dies zu Leistungsproblemen führen kann.
Ich kann nicht einfach ein selected
-Attribut zum Listenelement hinzufügen, da ich irgendwie die Daten, die zu dem benutzerdefinierten Element kommen, nicht modifiziere, und ich möchte im Grunde, dass mein Code richtig funktioniert, ohne zu viele Änderungen vorzunehmen.
Ich bin mit dieser tollen Lösung von Fabio Luz mit dieser kleinen Bearbeitung gelandet:
UPD Hier ist eine Möglichkeit, diese fantastische Lösung von Fabio Luz zu interpretieren.
> %Vor%und
%Vor%Aber ich endete mit diesem (Definieren eines zusätzlichen Arrays) .
Sie müssen eine Eigenschaft anstelle einer Funktion verwenden. So:
%Vor%HTML:
%Vor%BEARBEITEN
Ich weiß, dass es ein Overkill sein könnte, aber es ist die schönste Lösung, die ich bisher gefunden habe:
Erstellen Sie eine Klasse für Ihre Objekte:
%Vor%Verwenden Sie die obige Klasse, um die Objekte des Arrays zu erstellen:
%Vor% Nun können Sie getClass
property verwenden:
Ich hoffe, es hilft!
Sieht ziemlich traurig aus.
Ich vermisse es, Ihren Punkt für die Computerklasse in HTML zu verstehen. Versuchen Sie diesen Code, es sollte Ihnen helfen.
%Vor%Ihr Code funktioniert nicht, weil Sie sonst die Option "if" verpassen, wenn der Status: /
lautet Aktualisierung:
Um den Attributstatus umzuschalten, versuchen Sie selected.bind="true/false"
Viel Glück, Egor
Eine großartige Lösung wurde von Fabio angeboten, aber es verursachte Probleme (die Daten, die in beide Richtungen an den Benutzer gebunden waren) Element (Ergebnis der Auswahl) war nicht vom selben Typ wie die Eingabe und so weiter). Dies kann definitiv behoben werden, aber es würde eine signifikante Menge an Zeit benötigen und dazu führen, dass Tests neu geschrieben werden, usw. Alternativ könnten wir das ursprüngliche Objekt als eine Eigenschaft verwenden, blah-blah-blah ...
Es gibt eine andere Lösung, weniger elegant, aber viel schneller zu implementieren.
Lassen Sie uns ein zusätzliches Array deklarieren
%Vor% Inject ObserverLocator
Beobachten Sie das ausgewählte Array
%Vor% Aktualisiere die shownProperties
Und schließlich in der Ansicht:
%Vor%Verwenden Sie keine Methoden in der Ansicht, wie ich es getan habe:)
Tags und Links javascript aurelia aurelia-binding