Ember.js: [2.15.0] {{link-to}} innerhalb eines Teils funktioniert nicht mehr

Erstellt am 1. Sept. 2017  ·  25Kommentare  ·  Quelle: emberjs/ember.js

Nach dem Upgrade auf 2.15.0 scheiterten einige unserer Tests, weil ein {{#link-to}} innerhalb eines Teils nicht mehr funktionierte.

Dies ist das fragliche {{link-to}} . Beim Rendern treten keine unmittelbaren Fehler auf, aber die generierte href ist nur # und das Attribut data-test-user-id wird beim Testen nicht ausgegeben. Durch Klicken auf den Link wird folgende Warnung ausgegeben:

This link-to is in an inactive loading state because at least one of its parameters presently has a null/undefined value, or the provided route name is invalid.

Alles andere innerhalb des Teils wird immer noch gut, es ist nur die Verknüpfung, die fehlschlägt.

Das Ändern des Teils in eine Komponente hat das Problem behoben.

Bug Ember 2.15

Hilfreichster Kommentar

Reproduktion in 2.15 . Gleiches Twiddle in 2.14 .

Alle 25 Kommentare

Ich bin in 2.15 auf ein ähnliches Problem gestoßen. Es scheint, dass ein Teil, der in einem nachgegebenen Block von einer Komponente gerendert wird, die nachgegebenen Parameter von dieser Komponente nicht empfängt.

Beispiel:

// -name.hbs
<p>{{name}}</p>

component.js

export default Component.extend({
  name: "Ivan"
})

template.hbs

{{yield name}}

some-route-template.hbs

{{#my-component as |name|}}
  {{partial "name"}}
{{/my-component}}

In diesem Fall ist die Variable {{name}} im Teil undefiniert.

Das gleiche passiert mit einer #each-Iteration. Der Wert von #each wird nicht an den Kontext des Teils übergeben.

{{#each visibleContent as |record index|}}
  {{partial rowTemplate}}
{{/each}}

Sowohl Datensatz als auch Index sind im Teil undefiniert.

Reproduktion in 2.15 . Gleiches Twiddle in 2.14 .

Interessanterweise kann ich die Eigenschaft einer "verlorenen" Variablen immer noch anhand ihres Namens referenzieren, z. B. in rowTemplate könnte ich record.id tun, aber nicht (get record "id") . Ich bin mir nicht sicher, ob dies beim Debuggen des Problems hilfreich ist.

Ist dieses Verhalten ein Erbe oder gibt es einen alternativen Ansatz, der in Betracht gezogen werden sollte? Wir haben versucht, Komponenten über Partials zu verwenden, aber für unsere große App gibt es immer noch viele Fälle, in denen dieser Fehler Probleme verursacht. Zu diesem Zeitpunkt ist das Upgrade für uns gesperrt, und ich bin überrascht, dass dies nicht mehr Leute betrifft.

Nein, dies ist an sich kein Legacy-Verhalten, aber es ist ziemlich ungewöhnlich. Sie sollten _totally_ zur Verwendung von Komponenten migrieren, wann immer Sie können (es ist massiv einfacher, darüber nachzudenken), aber wir sollten dies unbedingt so schnell wie möglich beheben.

@rwjblue irgendwelche

Ich habe https://github.com/emberjs/ember.js/issues/15674 mit einigen fehlgeschlagenen Testfällen eingereicht. Es scheint, dass das Problem nicht so einfach ist wie der Zugriff auf gebundene Eigenschaftswerte innerhalb des Teils (zumindest schien es bei meinen Tests nicht so zu sein). Ich glaube, das zugrunde liegende Problem hat damit zu tun, wie wir die Referenzen generieren, die von Dingen wie if , unless , with und get .

Leider habe ich keine rauchende Waffe, auf die ich zeigen kann. :(

Aufgrund dieses Fehlers können wir auch kein Upgrade durchführen. Ähnlich wie bei @ thec0keman haben wir eine ziemlich große Ember-App, die ursprünglich mit EAK gestartet wurde. Es gibt also noch einige ältere Funktionen, die wir noch nicht in die moderne Ember-Version aufgenommen haben

Wir haben nicht mehr viele Partials übrig, aber genug, dass dies ein Blocker für uns ist, bis wir die Zeit haben, die verbleibenden Partials auf Komponenten zu migrieren / zu testen

Dieser sollte wirklich eine höhere Priorität haben, Partials sind seit 2.15 kaputt und verhindern, dass Leute von 2.14 auf 2.16 upgraden.

+1

Ich werde mir das nächste Woche nach dem EmberFest ansehen.

Ich habe das Twiddle von @Serabe erweitert und herausgefunden, dass die Partials den richtigen Wert erhalten, wenn eine Eigenschaft mit demselben Namen im Controller definiert wird. Wenn ein Wert in einem Array jedoch undefined denkt der Teil immer noch, dass er einen wahrheitsgemäßen Wert hat.

Dies ist ein Fehler in Glimmer. Siehe in der angegebenen Ausgabe.

Eine neue Glimmer-Version mit dem Fix wurde veröffentlicht. Nach dem Update der Glimmer-Version sollte dieser Fehler behoben sein. Ich habe eine Pull-Anfrage zum Aktualisieren der Glimmer-Version geöffnet.

Zu Ihrer Information - Das Upgrade auf Glimmer 0.29 ist ein großer Aufwand (und es ist unwahrscheinlich, dass es vor Ember 3.0.0 erfolgt). Update auf den Zweig 0.25

@rwjblue LMK, wenn es irgendetwas gibt, das ich bei der Veröffentlichung helfen kann, einschließlich des gepatchten 0.25-Zweigs (da ich gerade an einem Upgrade von Intercom arbeite). Soweit ich das beurteilen kann, hat es den Glutkanarienvogel noch nicht erreicht

Das gleiche Problem besteht auch bei Verwendung von with helper:

{{#with someProperty as |youNameIt|}}
  {{partial somePartial}}
{{/with}}

Wahrscheinlich wird der Patch dies auch beheben, aber um sicher zu gehen, erwähne ich es hier!

Hallo. Gibt es ein Update für dieses Problem? Soweit ich das beurteilen kann, sind die meisten Helfer etwas betroffen, wenn sie in einem partial . Gibt es eine Problemumgehung?

Ember 2.16.1 wurde veröffentlicht, mit dem die Probleme mit Partials behoben werden sollen. Bitte lassen Sie mich wissen, wenn Sie immer noch Probleme sehen

Während diese Probleme behoben wurden, habe ich zu Ihrer Information gerade ein anderes Problem mit Partials gefunden:

https://github.com/emberjs/ember.js/pull/15797

Ich werde später heute daran arbeiten, dies zu beheben

Seid ihr euch ganz sicher, dass es für 2.15 gelöst wurde? Das Twiddle von @Serabe (https://github.com/emberjs/ember.js/issues/15621#issuecomment-326823615) schlägt in 2.15.3 immer noch fehl, funktioniert jedoch in 2.16.1.

Übrigens ist mir aufgefallen, dass beim Ändern des Teils zum Schreiben von name tatsächlich der richtige Wert ausgegeben wird ...

image

Es ist nicht. Ember 2.15 ist kein LTS, daher denke ich nicht, dass eine Lösung kommen wird.

Bestätigen.

Oh ok. Ich dachte, das Update, das auf Glimmer 0.25 zurückportiert wurde, würde bedeuten, dass dies auch auf Ember 2.15 funktioniert. Vermutlich springen wir dann direkt zu 2.16. Vielen Dank!!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen