1

ここで、RootView は初期ビューを描画し、BranchObj を作成します。これは、その init 関数で RootView の branchView を探し、別のビューをそれに貼り付けようとします。

問題は、行 1 (コンソールが「1」をログに記録する) が行 2 (コンソールに「2」をログに記録する) の前に書き込まれているにもかかわらず、コンソールが「1」の前に「2」をログに記録することです。エラーは、BranchObj が探しているビューを RootView の branchView で見つけることができないためです。

2 つの関数を正しい順序で実行するにはどうすればよいですか?

App.RootView = Ember.CollectionView.extend({
  ...

  didInsertElement: function() {
    //draw this branch
    var branchView = App.BranchView.create();
    this.set("branchView",branchView);
    this.get("childViews").pushObject(branchView); //Line 1

    //draw a child
    App.BrachObj.create({parentView:this}); //Line 2
  }
});

App.BranchView = App.RaphaelView.extend({
  didInsertElement: function() {
    console.log(1);
  },
  ...
});

App.BranchObj = Ember.Object.extend({
  init: function() {
    console.log(2);
  },
  ...
});
4

1 に答える 1

1

CollectionViewのEmberドキュメントからhttp://emberjs.com/api/classes/Ember.ContainerView.html

CollectionViewのchildViewsプロパティを直接操作しないでください。代わりに、コンテンツプロパティからアイテムを追加、削除、置換します。これにより、レンダリングされたHTMLに適切な変更が加えられます。

pushObjectを使用した直接配列操作では、didInsertElementイベントは発生しないようです。代わりに、BranchObjの初期化後に発生します(2行目)。代わりに、contentプロパティを使用して操作してみてください。

于 2012-10-30T06:08:28.287 に答える