Javascript 添加到CollectionView内容后,第1行出现余烬错误

Javascript 添加到CollectionView内容后,第1行出现余烬错误,javascript,ember.js,Javascript,Ember.js,使用Ember js,我得到了一个基于树的视图结构,每个视图都有一个文本框。在任何框中输入文本并点击“回车”应为该视图添加“回复”;也就是说,在原始视图下方添加另一个视图(通过缩进) 问题是,当我点击“回车”时,ember只是在ember.js脚本的第1行出错而崩溃。你知道问题出在哪里吗 JS小提琴:好的,我想你的小提琴已经修好了: 我认为主要问题在于 Bap.Reply=Ember.Object.extend{ 文本:空, 子项:[],//不要这样做,而是将其声明为null,然后创建 //实例

使用Ember js,我得到了一个基于树的视图结构,每个视图都有一个文本框。在任何框中输入文本并点击“回车”应为该视图添加“回复”;也就是说,在原始视图下方添加另一个视图(通过缩进)

问题是,当我点击“回车”时,ember只是在ember.js脚本的第1行出错而崩溃。你知道问题出在哪里吗


JS小提琴:好的,我想你的小提琴已经修好了:

我认为主要问题在于

Bap.Reply=Ember.Object.extend{ 文本:空, 子项:[],//不要这样做,而是将其声明为null,然后创建 //实例化时的空子对象 addReply:functiontext{ this.get'children.addObjectBap.Reply.create{text:text,content:[]}; }, }; //或等效实现,如果希望使用默认空数组创建每个实例: Bap.Reply=Ember.Object.extend{ 文本:空, children:null, //重写Ember对象的类构造函数的init方法 init:函数{ 这个。_super;//非常重要,别忘了 这个。设置‘children’,[]; }, addReply:functiontext{ this.get'children.addObjectBap.Reply.create{text:text,content:[]}; }, }; 当您想要声明一个类时,如果它拥有一个数组子类,您必须将其声明为null,然后在创建时将其初始化为[]。这是一个常见的陷阱,当开始与余烬。事实上,底层行为是Bap.Reply的所有实例将共享同一子数组

因此,当您将一些子项添加到第一个子项中时,这可能会导致糟糕的结构,因为所有子项都有相同的父项,有些子项与兄弟姐妹有相同的子项,等等。。。我认为,在这之后,当Ember想要更新绑定和呈现视图时,它就会丢失,因此您会遇到意外和奇怪的错误

顺便说一下,为了遵守余烬命名约定,我已经修复了一些小的拼写错误,因为类应该是驼峰式的

以下是两个有用的链接,详细内容如下: