我在访问元素时遇到了一个重复的问题,特别是在Ember中通过另一个元素的引用获得的元素。我在视图中的“didInsertElement”钩子中运行了javascript,这就是网上大多数地方似乎都指出运行该逻辑的正确位置。
但是,我试图访问的ember对象并不真实--Ember(可能是EmberData)返回一个没有任何所需值的空白占位符对象。每个属性都是未定义的。
我已经尝试等待解决的承诺...但它不是一个承诺,它只是一个具有未定义属性的虚假对象。我尝试过使用Ember.run.next,以确保首先完成加载。这两种解决方案或我尝试的其他解决方案都没有奏效。
以下是我的意思的一个例子: 模板:
{{#each entry in list.entries}}
{{display-note note=entry}}
{{/each}}
成分:
didInsertElement: function(){
alert(this.get("note").get("title"));
}
这不一致地返回“未定义”,在我传递对象列表(类似{{display-notes notes=list.entries}}
)的情况下更加不一致。
在模板中执行{{list.entry.title}}
之类的操作可以正常工作 - 数据正在加载,只是它被“假对象”替换,直到发生这种情况,并且我不知道如何告诉ember应用程序要等到真正运行我的代码并尝试访问它。
对于 self 引用尤其如此。有时很少,上面的代码似乎有用 - 但如果我有一个评论的树,例如hasMany
评论为children
,那么即使在模板中,尝试访问children
也会失败。这可能是由于另一个问题,或两个问题的组合。
答案 0 :(得分:0)
我猜这里note
未定义:
didInsertElement: function(){
alert(note.get("title"));
}
使用didInsertElement
,从当前视图(即this
)开始,然后从那里获取数据。假设你在NoteView
,它看起来像这样:
App.NoteView = Ember.View.extend({
title : 'hello world'
didInsertElement: function (){
alert(this.get('title'));
}
})