我正在研究 Ember.js 2.12.0
如何防止控制器和组件之间嵌套数组对象的同步。
对于ember字符串,它的工作原理但嵌套数组对象无效。
下面是ember twiddle link
如果您更改字符串和 arr 的值并点击进入HOME路线并再次进入ABOUT路线,那么您可以看到<的值strong>字符串已更改,但 arr 的值未更改
提前感谢您的帮助。
答案 0 :(得分:1)
String是primitive typed对象,但Array不是。因此,当组件修改str
时,它不会反映到控制器str
。因为您正在组件中复制其值。您可以通过向{{str}}
添加about.hbs
来尝试此操作。看到它没有改变。 (在你现在的旋风中。)
但阵列不同。它不仅仅是一种价值。组件的arr与控制器arr相同。当组件修改它时,您可以在about.hbs
中看到它的更改。 (另请参阅按值传递,按引用传递。)
另一方面,控制器是单件控制器,它们存储最后一个值。因此,无论何时更改数组,您都可以看到它是持久的。
上面,我提到了原因。下面我将提到解决方案:
model
挂钩生成并发送数组。我还修改了您的组件,请参阅this twiddle。
此外,永远不要在对象定义中定义数组。因为该类的所有实例将共享相同的数组实例。 (它也写在the guide的某个地方。)
答案 1 :(得分:0)
import Ember from 'ember';
export default Ember.Route.extend({
setupController(controller, model){
controller.set("arr",[{name:'ravi kumar'}])
}
});
这将确保您始终获得重置。
您在routes / about.js
中创建的此文件