使用Ember js,我有一个基于树的视图结构,每个视图都有一个文本框。在任何方框中输入文字并点击“输入”应该向该视图添加“回复”;也就是说,在原始视图下方添加另一个通过<ul>
缩进的视图。
问题是,当我点击'enter'时,ember只是在ember.js脚本的第1行发生错误而崩溃。任何想法可能是什么问题?
答案 0 :(得分:0)
好的,我认为已经修复了你的小提琴:http://jsfiddle.net/Sly7/hVdab/
我认为主要问题在于
Bap.Reply = Ember.Object.extend({
text: null,
children: [], // don't do that, instead declare it as null, and create
// an empty children at instanciation time
addReply: function(text) {
this.get('children').addObject(Bap.Reply.create({text:text, content: []}));
},
});
//or an equivalent implementation, if you want each instance to be created with a default empty array:
Bap.Reply = Ember.Object.extend({
text: null,
children: null,
//overriding the init method (kind of constructor for Ember's Objects
init(): function() {
this._super(); // very important, don't forget it
this.set('children', []);
},
addReply: function(text) {
this.get('children').addObject(Bap.Reply.create({text:text, content: []}));
},
});
如果要声明一个类,如果它拥有一个数组子类,则必须将其声明为null,然后在创建时将其初始化为[]
。这是从ember开始时的常见问题。事实上,基本行为是Bap.Reply
的所有实例将共享相同的子数组。
所以当你在第一个孩子中添加一些孩子时,这可能会导致一个糟糕的结构,因为所有孩子都有同一个孩子,有些孩子和他们的兄弟姐妹有相同的孩子等...我想在那之后,Ember当它想要更新绑定并渲染视图时会丢失,因此您会遇到意外和奇怪的错误。
顺便说一句,为了尊重Ember Naming惯例,我已经修复了一些小错字,因为类应该是驼峰式的。
以下是两个有用的链接,详细信息如下: