什么是完全拆除并在旧位置重新实例化组件的最佳方法,最好是从模板中?
我们的用例是我们有一堆在我们的视图中使用的 Backbone 模型/集合。我们可能会监听其中init
一些模型或集合事件(有时很深),或者我们可能会做一些与该模型相关的设置工作。似乎我们有两个选择:监听视图上的整个模型属性是否发生变化,然后取消绑定任何事件并将它们绑定到新模型并重做任何设置工作,或者强制视图拆除并放置一个新的使用新模型,因为模板可能会发生显着甚至完全更改。我们选择后一条路线是因为变化的重要性,并确保我们从一个干净的视图开始。
到目前为止,我们一直在将组件包装在条件中并更改布尔值以强制旧组件拆除并重新渲染新组件:
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
这是一种体面的方法,还是我们认为这一切都错了?似乎必须有更好的选择,特别是因为在我们应用程序的一些地方是必要的。