0

我有模型:

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-data 文档中找不到任何有用的东西。谁能帮我?谢谢

4

1 回答 1

0

我试过这个:

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

这是正常的,因为调用.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()and.set()而不是普通的点表示法,否则您会劫持绑定机制,导致您的视图等没有更新。

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

希望能帮助到你。

于 2013-09-02T11:55:08.343 回答