Ember.js 如何获取模型属性

Ember.js 如何获取模型属性,ember.js,ember-data,Ember.js,Ember Data,我有一个模型: App.Item = DS.Model.extend({ itemId: DS.attr('string'), itemName: DS.attr('string'), itemType: DS.attr('string'), }); 我成功地从JSON创建了一些项目。我可以通过{{{each items}{{itemName}{{/each}}将它们放到页面上。但我不知道,如何在javascript中获取itemName 我试过这个: var item = App

我有一个模型:

App.Item = DS.Model.extend({
  itemId: DS.attr('string'),
  itemName: DS.attr('string'),
  itemType: DS.attr('string'),
});
我成功地从JSON创建了一些项目。我可以通过{{{each items}{{itemName}{{/each}}将它们放到页面上。但我不知道,如何在javascript中获取itemName

我试过这个:

var item = App.Item.find(1);
console.log(item.itemName);
-->未定义

我在emberjs和ember数据文档中找不到任何有用的东西。有人能帮我吗? 谢谢

我试过这个:

var item = App.Item.find(1);
console.log(item.itemName);
这是正常的,因为调用
.find(1)
是异步的,返回的是承诺,而不是您期望的项

因此,您应该尝试:

App.Item.find(1).then(function(result) {
  console.log(record.get('itemName'));
});
它还取决于您在哪里执行
App.Item.find()
如果它来自路线内部,您应该等到调用
afterModel
钩子才能访问您的项目:

App.FooRoute = Ember.Route.extend({
  model: function() {
    return App.Item.find(1);
  },
  afterModel: function(record) {
    console.log(record.get('itemName'));
  }
});
还要注意的是,如果您在没有参数的情况下调用
find()
,那么您将收到一个
RecordArray
,您需要将其循环以访问您的项目。另外值得一提的是,在ember中,您应该始终使用
.get()
.set()
而不是普通的点符号,否则会劫持绑定机制,导致视图中没有更新等

注意,如果您使用的是最新的ember.js版本(1.0.0),那么对
.find()
的调用应该有所不同。但你的问题并不清楚


希望能有所帮助。

您是否尝试过item.get('itemName')是的,现在:)-->Unfine我想您还应该添加一个解释,说明他在访问属性时应该使用
.get()
.set()
。我使用的是1.0.0.-rc.7。现在我的结果是“请求提取,但没有为App.Device提供数据。这可能会导致奇怪的问题。”@Meph-遗憾的是,从你发布的小代码中,很难猜出还有哪里会出错。。。您能提供一个简单的jsbin,只包含经过提炼的用例吗?