2.15.0にアップグレードした後、パーシャル内の{{#link-to}}
が機能しなくなったため、一部のテストが失敗し始めました。
これは問題の{{link-to}}
です。 レンダリング時に即時エラーは発生しませんが、生成されたhrefは#
あり、テスト時にdata-test-user-id
属性は出力されません。 リンクをクリックすると、次の警告が出力されます。
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.
パーシャル内の他のすべてはまだ正常にレンダリングされます。失敗するのはリンクだけです。
パーシャルをコンポーネントに変更すると、問題が修正されました。
2.15でも同様の問題が発生しました。コンポーネントから生成されたブロック内にレンダリングされた部分が、そのコンポーネントから生成されたパラメーターを受け取らないようです。
例:
// -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}}
この例では、パーシャルの{{name}}
変数は未定義です。
同じことが#each反復でも起こります。 #eachからの値は、パーシャルのコンテキストに渡されません。
{{#each visibleContent as |record index|}}
{{partial rowTemplate}}
{{/each}}
レコードとインデックスの両方がパーシャルで未定義です。
興味深いことに、私はまだその名前により、例えば"失われた"変数のプロパティを参照することができますrowTemplate
私は何ができるrecord.id
ではなく(get record "id")
。 それが問題のデバッグに役立つかどうかはわかりません。
この動作はレガシーですか、それとも考慮すべき代替アプローチがありますか? 私たちはパーシャルよりもコンポーネントを使用しようと試みてきましたが、私たちの大きなアプリでは、このバグが問題を引き起こしている例がまだたくさんあります。 この時点で、アップグレードはブロックされており、これがより多くの人々に影響を与えていないことに驚いています。
いいえ、これ自体はレガシー動作ではありませんが、かなりまれです。 可能な場合はいつでもコンポーネントの使用に_完全に_移行する必要があります(推論するのは非常に簡単です)が、これはできるだけ早く修正する必要があります。
@rwjblueこれを修正するために探し始める必要のあるポインタはありますか?
https://github.com/emberjs/ember.js/issues/15674を送信し、いくつかのテストケースが失敗しました。 問題は、パーシャル内のバインドされたプロパティ値にアクセスするほど単純ではないようです(少なくとも私のテストではそうではなかったようです)。 根本的な問題は、 if
、 unless
、 with
、 get
などで使用される参照を生成する方法に関係していると思います。
残念ながら、私は煙を吐く銃を持っていません。 :(
このバグのため、アップグレードすることもできません。 @ thec0kemanと同様に、元々EAKを使用して開始されたかなり大きなemberアプリがあるため、現在のemberにはまだ導入されていないレガシー機能が残っています。
パーシャルはあまり残っていませんが、残りのパーシャルをコンポーネントに移行/テストする時間があるまでは、これがブロッカーになるほどです。
これは実際にはもっと高い優先度を取得する必要があります。2.15以降、パーシャルが壊れており、2.14から2.16にアップグレードできなくなります。
+1
来週はEmberFestの後に見ていきます。
@Serabeのひねりを拡張したところ、同じ名前のプロパティがコントローラーで定義された場合、パーシャルが正しい値を取得することがわかりました。 ただし、配列の値がundefined
の場合でも、パーシャルはそれが真の値であると見なします。
これはGlimmerのバグです。 参照されている問題を参照してください。
修正された新しいグリマーバージョンがリリースされました。 グリマーバージョンを更新した後、このバグを修正する必要があります。 グリマーバージョンを更新するためのプルリクエストを開きました。
参考までに@ chadhietalaは修正を0.25ブランチにバックポートしました。 それをパッチバージョンとしてリリースし、代わりにそのバージョンに更新する必要があります。 今日はこれらのリリースを完成させようと思います...
@rwjblue LMKパッチが適用された0.25ブランチを含むリリースで役立つことがあれば(現在Intercomのアップグレードに取り組んでいるため)。 私の知る限り、まだ残り火のカナリアには達していない
withヘルパーを使用する場合にも同じ問題が存在します。
{{#with someProperty as |youNameIt|}}
{{partial somePartial}}
{{/with}}
おそらくパッチでこれも修正されるでしょうが、確かにここで言及します!
こんにちは。 この問題に対してリリースされた修正はありますか? 私の知る限り、ほとんどのヘルパーはpartial
使用すると多少影響を受けます。 回避策はありますか?
パーシャルの問題を修正するEmber2.16.1がリリースされました。 それでも問題が発生する場合はお知らせください
これらの問題は修正されましたが、参考までに、パーシャルに関する別の問題を見つけました。
https://github.com/emberjs/ember.js/pull/15797
今日の後半にこれを修正する作業をします
2.15で解決されたと完全に確信していますか? @Serabe (https://github.com/emberjs/ember.js/issues/15621#issuecomment-326823615)からの
ちなみに、パーシャルを変更してname
を書き込むと、実際には正しい値が出力されることに気づきました...
そうではない。 Ember 2.15はLTSではないので、修正は行われないと思います。
確認。
ああ、わかりました。 修正がグリマー0.25にバックポートされるということは、これがEmber2.15でも機能することを意味すると思いました。 次に、2.16に直接スキップすると思います。 ありがとう!
最も参考になるコメント
2.15での複製。 2.14で動作する同じひねり。