8

这个问题和整个问题的答案已经过时了。EMBER 数据发生了很大变化。阅读:http: //guides.emberjs.com/v1.11.0/models/

我有这个小的 Ember 应用程序:

window.App = Ember.Application.create();

App.Store = DS.Store.extend({
  revision: 11,
  adapter: DS.FixtureAdapter({
    simulateRemoteResponse: false
  })
});

App.Model = DS.Model.extend({
  title: DS.attr('string')
});
App.Model.FIXTURES = [];

App.ready = function() {
  console.dir(App.Model.find().get('length'));
  App.Model.createRecord({id: 1, title: "TEST"});
  console.dir(App.Model.find().get('length'));
  console.dir(App.Model.find(1).get('title'));
};

我得到了正确的标题,console.dir(App.Model.find(1).get('title')但是两个get('length')调用都返回 0。我错过了什么?

这是一个(非)工作的 jsbin:http: //jsbin.com/uxalap/6/edit

4

1 回答 1

9

原因可能是您get("length")甚至在加载数据之前就调用了,

基本上,当你这样做时,App.Model.find()它会返回一个实例,RecordArray但它不会有数据,在后台它会查询数据库并获取数据,现在一旦加载数据,你就会找到实际长度

您可以尝试在属性上添加观察者,isLoaded如下所示

record = App.store.findQuery(App.Model);
alertCount = function(){
  if(record.isLoaded){
    alert(record.get("length"));
  }
};
Ember.addObserver("isLoaded", record, alertCount);
于 2013-02-28T13:50:54.187 回答