1

在这里,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);
  },
  ...
});
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 回答