Emberjs代码乱序运行

时间:2012-10-29 23:58:49

标签: javascript ember.js

在这里,RootView绘制一个初始视图,然后创建一个BranchObj,它在其init函数中查找RootView的branchView并尝试将另一个视图粘贴到它上面。

问题是,即使第1行(应该导致控制台记录“1”)在第2行之前写入(这应该导致控制台记录“2”),控制台在“1”之前记录“2”,因为BranchObj无法在RootView的branchView中找到它正在查找的视图,所以会出错。

如何使两个功能以正确的顺序运行?

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);
  },
  ...
});

1 个答案:

答案 0 :(得分:1)

来自CollectionView http://emberjs.com/api/classes/Ember.ContainerView.html

上的Ember文档
  

不应直接操作CollectionView的childViews属性。而是添加,删除,替换其内容属性中的项目。这将触发对其呈现的HTML的适当更改。

使用pushObject进行直接数组操作似乎不会触发didInsertElement事件。而是在BranchObj的init之后触发(第2行)。请尝试使用content属性进行操作。