わかりました、私はあなたのフィドルを修正したと思います: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として宣言し[]
、作成時に初期化する必要があります。これは、残り火で始まる場合の一般的な落とし穴です。実際、基本的な動作は、のすべてのインスタンスがBap.Reply
同じ子配列を共有することです。
したがって、最初の子に子を追加すると、すべての子が同じ親を持ち、一部の子が兄弟と同じ子を持っているなど、構造が不安定になる可能性があります。その後、Emberは次の場合に失われると思います。バインディングを更新してビューをレンダリングする必要があるため、予期しない奇妙なエラーが発生します。
ちなみに、Emberの命名規則を尊重するために、クラスはキャメルケースにする必要があるため、いくつかのマイナーなタイプミスを修正しました。
詳細を説明する2つの便利なリンクを次に示します。