首頁 > web前端 > js教程 > 如何在 EmberJS 中有效地在同一路由上載入多個模型?

如何在 EmberJS 中有效地在同一路由上載入多個模型?

Susan Sarandon
發布: 2024-10-30 09:58:27
原創
616 人瀏覽過

How to Effectively Load Multiple Models on the Same Route in EmberJS?

EmberJS:在同一條路線上載入多個模型

使用EmberJS 時,你可能會遇到需要在同一路徑上載入多個不相關模型的情況相同的路線。這可能會令人困惑,特別是如果您不熟悉客戶端 MVC 框架。

警告:

在嘗試載入多個模型之前,請考慮以下事項:

  • 路由是否基於URL slug(例如/ books/:id)載入動態資料?如果是,請不要從模型掛鉤載入多個模型,因為它可以跳過模型掛鉤並使用提供的模型,這可能會導致問題。

適當時載入多個模型:

如果路由沒有動態 URL,您可以從路由的模型掛鉤傳回多個模型。例如:

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return {
           model1: ['red', 'yellow', 'blue'],
           model2: ['green', 'purple', 'white']
    };
  }
});
登入後複製

載入多個具有Promise 的模型:

如果取得資料涉及Promise,可以在模型hook 中使用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板