如何在Ember.js中获取find()结果的长度

8

这个问题的答案以及整个问题都已经过时了。Ember Data已经发生了很大变化。请阅读此文: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

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);

你也可以使用'didLoad'事件来代替间接属性观察:record.one('didLoad', function(){ alert(record.get('length')) }); - Christopher Swasey
@ChristopherSwasey 现在我收到了:错误:未找到 在 RSVP.onerrorDefault - SuperUberDuper
2
这个QA已经有2年了,而Ember Data在这段时间内发生了很大的变化。我希望能有一种方法在SO上标记和淘汰过时的问题/答案。 - Christopher Swasey
@ChristopherSwasey 是的,你说得对。我在问题中添加了一条注释。 - ohcibi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接