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

问题是,即使在第2行(应导致控制台记录“ 2”)之前写入第1行(应使控制台记录“ 1”),控制台仍在“ 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);
  },
  ...
});

最佳答案

来自CollectionView http://emberjs.com/api/classes/Ember.ContainerView.html上的Ember文档


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


看来使用pushObject进行直接数组操作不会触发didInsertElement事件。相反,它是在BranchObj初始化之后触发的(第2行)。尝试使用content属性进行操作。

关于javascript - Emberjs代码故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13131384/

10-12 13:50