难以在Ember中的“didInsertElement”代码中访问实际对象

时间:2014-06-11 21:03:27

标签: javascript ember.js ember-data

我在访问元素时遇到了一个重复的问题,特别是在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也会失败。这可能是由于另一个问题,或两个问题的组合。

1 个答案:

答案 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'));
  }
})