Aurelia: Methode immer in der Ansicht aufrufen (Probleme nach dem Upgrade)

8

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:

Wie erzwinge ich, dass Aurelia Methoden in Attributen in der Ansicht aufruft?

P.S.

Ich verstehe, dass dies zu Leistungsproblemen führen kann.

Kleiner Hinweis:

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.

UPD

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) .

    
Alexander Mikhalchenko 28.12.2015, 15:46
quelle

3 Antworten

2

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:

%Vor%

Ich hoffe, es hilft!

    
Fabio Luz 28.12.2015, 19:40
quelle
1

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

    
Egor Malkevich 28.12.2015 16:40
quelle
1

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 ...

Jedenfalls:

Es gibt eine andere Lösung, weniger elegant, aber viel schneller zu implementieren.

  1. Lassen Sie uns ein zusätzliches Array deklarieren

    %Vor%
  2. Inject ObserverLocator

  3. Beobachten Sie das ausgewählte Array

    %Vor%
  4. Aktualisiere die shownProperties

    %Vor%
  5. Und schließlich in der Ansicht:

    %Vor%

Also, die Moral der Geschichte:

Verwenden Sie keine Methoden in der Ansicht, wie ich es getan habe:)

    
Alexander Mikhalchenko 30.12.2015 17:32
quelle