【发布时间】:2013-06-07 18:30:46
【问题描述】:
我正在开发一个基于 ember 的项目,但我不确定设计。 我有一个所有其他控制器都在扩展的应用程序控制器:
基础控制器
App.ApplicationController = Ember.Controller.extend({
needs:['userNav'],
dateNavSelected : '',
currentSleeperImg:AppStateManager.get('currentSleeperImg'),
currentSleeperName:AppStateManager.get('currentSleeperName'),
didSleeperChange:false,
logout: function(){
AppStateManager.transitionTo('loggedOutState');
this.transitionToRoute('signin');
},
selectSleeper: function(sleeper){ //Gets the sleeper change from the menu
var currSleeper = AppStateManager.get('currentSleeperObj');
if(!currSleeper || (currSleeper && sleeper.get('id') != currSleeper.get('id'))){
AppStateManager.set('currentSleeperImg', sleeper.get('sleeper_avatar'));
AppStateManager.set('currentSleeperName', sleeper.get('sleeper_name'));
AppStateManager.set('currentSleeperObj', sleeper );
this.set('currentSleeperImg' , sleeper.get('sleeper_avatar'));
this.set('currentSleeperName' , sleeper.get('sleeper_name'));
this.set('didSleeperChange', true);
}else{
this.set('didSleeperChange', false);
}
}
});
儿童控制器
App.LastNightSummaryController = App.ApplicationController.extend({
pageTitle: moment().subtract('days', 1).format("MMM D"),
active:'last-night-summary',
selectSleeper: function(sleeper){ //Gets the sleeper change from the menu
this._super(sleeper);
if(this.get('didSleeperChange')){
this.set('content', App.SleepData.find({id:sleeper.get('id'), sleeper:sleeper}));
}
}
});
是一个好的模式吗?
【问题讨论】:
-
IMO 严格 NO 为每个 Controller 扩展 applicationController...应该在应用程序级别处理的属性应该放在那里...每个其他实体都应该有自己的 Controller 来处理该特定状态...
-
我通常会做类似的事情,但当然不是
ApplicationController。你可以这样做,但扩展ObjectController和ArrayController代替。
标签: javascript ember.js