在这里,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/