我有我的Ember.js應用程序中的模型集合,我想呈現。問題是我希望能夠爲每個模型指定專門的視圖和控制器。如何呈現每個模型集合都具有變量視圖和控制器?
控制器部分似乎很容易:我只是將數組包裝在ArrayController
中並實施itemController
方法。視圖部分是它變得棘手的地方。我沒有看到明顯的習慣做法。
我們想出的最佳方式是將ArrayController
和CollectionView
與覆蓋的createChildView
相結合。例如:
createChildView: function(viewClass, attrs) {
var viewInstance,
widgetType = attrs.content.get('type');
// lookup view, if found, use it, if not, pass empty view
var viewDefined = this.container.lookup('view:' + widgetType);
var createWidgetType = viewDefined ? widgetType : 'empty';
// create view instance from widgetType name
// it causes lookup in controller
viewInstance = this._super(createWidgetType, attrs);
// if `attrs.content` is controller (item of `ComponentsController`)
// set it as controller of newly created view
if(attrs.content.get('isController')) {
viewInstance.set('controller', attrs.content);
}
return viewInstance;
}
這種感覺不必要的令人費解的,我不喜歡,我必須連接與控制器手動類似的觀點。有更清潔的方法嗎?
我同意與卡爾曼一樣,使用組件是一種更優雅的解決方案,並且更符合ember的方向。 – Timo 2014-12-04 19:59:17
不幸的是,它並沒有完全削減它,因爲我想爲每個模型都有不同的控制器和視圖類型,並且{{render}}的第一個參數看起來像不能是變量。例如,如果我的視圖/控制器的名稱是模型中的「類型」字段,那麼{{render item.type item}}將觸發一個斷言。 – VoY 2014-12-04 20:20:54