Как вычислить длину результата find () в Ember.JS


ОТВЕТ НА ЭТОТ ВОПРОС И ВЕСЬ ЭТОТ ВОПРОС УСТАРЕЛ. ДАННЫЕ ЭМБЕРА СИЛЬНО ИЗМЕНИЛИСЬ. Прочтите это: 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   8  

1 ответ:

Причина может быть в том, что вы вызываете 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);