EmberJS: 同じルートで複数のモデルをロードする
EmberJS を使用する場合、複数の無関係なモデルを同じルートにロードする必要がある状況が発生することがあります。同じルート。これは、特にクライアント側 MVC フレームワークを初めて使用する場合には、混乱する可能性があります。
注意:
複数のモデルをロードする前に、次の点を考慮してください。
適切な場合の複数のモデルのロード:
ルートに動的 URL がない場合は、ルートのモデル フックから複数のモデルを返すことができます。例:
App.IndexRoute = Ember.Route.extend({ model: function() { return { model1: ['red', 'yellow', 'blue'], model2: ['green', 'purple', 'white'] }; } });
Promise を使用した複数のモデルのロード:
データのフェッチに Promise が含まれる場合は、モデル フックで RSVP.hash メソッドを使用できます:
App.IndexRoute = Ember.Route.extend({ model: function() { return Ember.RSVP.hash({ model1: promise1, model2: promise2 }); } });
Ember データを使用したモデルのロード:
Ember データを使用する場合、モデル フックで複数のモデルを見つけることができます:
App.IndexRoute = Ember.Route.extend({ var store = this.store; model: function() { return Ember.RSVP.hash({ cats: store.find('cat'), dogs: store.find('dog') }); } });
代替アプローチ (動的ルートの処理により適しています):
モデル フックから複数のモデルをロードする代わりに、setupController または afterModel フックを使用して、コントローラーにモデル プロパティを設定できます。
コントローラー メソッドのセットアップ:
App.IndexRoute = Ember.Route.extend({ model: function(params) { return $.getJSON('/books/' + params.id); }, setupController: function(controller, model){ this._super(controller,model); controller.set('model2', {bird:'is the word'}); } });
モデル後メソッド:
App.IndexRoute = Ember.Route.extend({ model: function(params) { return $.getJSON('/books/' + params.id); }, afterModel: function(){ var self = this; return $.getJSON('/authors').then(function(result){ self.set('authors', result); }); }, setupController: function(controller, model){ this._super(controller,model); controller.set('authors', this.get('authors')); } });
このアプローチにより、モデルがsetupController フックで使用でき、コントローラーのプロパティに安全に割り当てることができます。
以上がEmberJS の同じルートに複数のモデルを効果的にロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。