できればテンプレートから、古いコンポーネントの場所でコンポーネントを完全に破棄して再インスタンス化する最良の方法は何ですか?
私たちのユースケースは、ビューで使用される一連のバックボーン モデル/コレクションがあることです。ではinit
、これらのモデルまたはコレクション イベントの一部をリッスンする場合があります (深い場合もあります)。または、そのモデルに関連する何らかのセットアップ作業を行う場合もあります。ビューでモデル プロパティ全体が変更されたかどうかをリッスンし、イベントのバインドを解除して新しいモデルにバインドし、セットアップ作業をやり直すか、ビューを強制的に破棄して新しいものをその場所に配置するかの 2 つのオプションがあるようです。テンプレートが大幅に、または完全に変更される可能性があるためです。変更の重要性と、ビューの白紙の状態から確実に開始できるようにするため、後者のルートを選択しました。
この時点まで、コンポーネントを条件付きでラップし、ブール値を変更して古いコンポーネントを破棄し、新しいコンポーネントを再レンダリングするようにしました。
HTML
<p>Some stuff that isn't bound to the model: {{prop1}}, {{prop2}}</p>
{{#if isRenderable}}
<myComponent model="{{model}}" />
{{/if}}
JS
component.set('isRenderable', false); // force `myComponent` to teardown
component.set('model', aDifferentModel); // this often happens in/via template
component.set('isRenderable', true); // force a new `myComponent` to render
これはまともなアプローチですか、それとも私たちはこれをすべて間違っていると考えていますか? 特に私たちのアプリのいくつかの場所で必要なため、より良いオプションが必要なようです.