Как вычислить длину результата 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 ответ:
Причина может быть в том, что вы вызываете
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);