ビューには 3 つのドロップダウンがあります。コントローラーの準備中に、次のことを行っています。
- バインドされたプロパティ (selectedCountry、selectedSubtype、selectedCity) を事前設定します (
this.set('selectedCountry', 'DE');
) - プロパティを設定したら、それらのプロパティのオブザーバーを追加して、ユーザーが選択を変更するたびにドロップダウンを再構成できるようにします。コントローラーを誤って起動しないように、プロパティを初期化した後にオブザーバーを追加するように注意しています。
ただし、ビューがレンダリングされるとすぐに、オブザーバーはすぐに解雇されます。ユーザーはまだアクションを実行していません。私はこれを理解していませんが、DOM でビューをレンダリングするときに、ember がドロップダウンでバインドされたプロパティを設定し、これによりオブザーバーが起動するのではないかと思います。あれは:
- Ember がビューをレンダリングします
- テンプレート内のコントローラ プロパティへのバインディングを確認します
- コントローラのプロパティに従ってDOM要素のプロパティを設定します
- そして、これはどういうわけかオブザーバーの発砲を引き起こします?!? どうして!?!?
この場合、私が考えることができる唯一の解決策は、ビューがレンダリングされた後にオブザーバーを構成することです。didInsertElement
forがありますがViews
、私の問題はコントローラー関連です。だから、私は混乱しています:コントローラーの仕事はレンダリングの問題を気にするのですか? 私はそうは思いません: それはビューの責任であるべきです! しかし、コントローラーは明らかにレンダリング順序の影響を受けます! これをきれいな方法で解決するにはどうすればよいですか?