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 に答える