【问题标题】:Difficulty accessing actual objects in "didInsertElement" code in Ember在 Ember 中的“didInsertElement”代码中难以访问实际对象
【发布时间】:2014-06-11 21:03:27
【问题描述】:

我在访问 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 引用尤其如此。有时,很少,上面的代码似乎工作 - 但如果我有一棵树,比如说,cmets,hasMany cmets 作为children,即使在模板中尝试访问children 也会失败。不过,这可能是由于另一个问题,或者是这两个问题的组合。

【问题讨论】:

  • 不应该是 {{#each entry in list}} 吗?
  • 我将其复数以使其更清晰。这实际上是一个不在列表中的关系。将其更改为“list.entries”。如果这仍然是错误的,当然,让我知道,因为那会是有问题的。

标签: javascript ember.js ember-data


【解决方案1】:

我猜note 在这里未定义:

didInsertElement: function(){
  alert(note.get("title"));
}

使用didInsertElement,从当前视图(即this)开始并从那里获取数据。假设您在NoteView 中,它看起来像这样:

App.NoteView = Ember.View.extend({
  title : 'hello world'

  didInsertElement: function (){
    alert(this.get('title'));
  }
})

【讨论】:

  • 不,note 已在此处定义 - 除了 id 之外,它仅具有未定义的所有属性。 id 是正确的。
  • 啊,我明白你的意思了。 >_
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多