2013-02-28 2 views
8

ОТВЕТ НА ЭТОТ ВОПРОС И НАСТОЯЩИЙ ВОПРОС - ОБОРОТ. ИЗМЕРИТЕЛЬНЫЕ ДАННЫЕ ИЗМЕНЯЛИ МНОГО. ПРОЧТИТЕ ЭТО: http://guides.emberjs.com/v1.11.0/models/

У меня есть это маленькое приложение Ember:Как добиться длины поиска() результата в Ember.js

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

ответ

9

Причина может заключаться в том, что вы призываете get("length") еще до того, были загружены данные,

В основном, когда вы делаете App.Model.find() он возвращает вам экземпляр из RecordArray, но он не будет иметь данных, в фоновом режиме он запрашивает базу данных и будет извлекать данные, теперь, как только данные будут загружены, вы найдете фактическую длину

вы можете попробовать добавить наблюдателя на isLoaded propertyt у следующего

record = App.store.findQuery(App.Model); 
alertCount = function(){ 
    if(record.isLoaded){ 
    alert(record.get("length")); 
    } 
}; 
Ember.addObserver("isLoaded", record, alertCount); 
+0

Вы также можете использовать события 'didLoad' вместо наблюдения непрямой собственности: record.one ('didLoad', функция() {Alert (record.get ('длиной'))}); –

+0

@ChristopherSwasey теперь я получаю: Ошибка: не найден на RSVP.onerrorDefault – SuperUberDuper

+2

Этот QA 2 года, и данные Ember Data значительно изменились за это время. Хотелось бы, чтобы можно было обозначить и устаревшие вопросы/ответы на SO. –

Смежные вопросы