添加到CollectionView的内容后,第1行的Ember错误

时间:2012-08-24 06:26:19

标签: javascript ember.js

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

问题是,当我点击'enter'时,ember只是在ember.js脚本的第1行发生错误而崩溃。任何想法可能是什么问题?

JS小提琴:http://jsfiddle.net/TcgJB/1/

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惯例,我已经修复了一些小错字,因为类应该是驼峰式的。

以下是两个有用的链接,详细信息如下: