在我的项目中,我们需要在应用程序的所有路径上反序列化相同的参数。我问在ApplicationRoute中处理反序列化是否是最佳解决方案,或者它是否存在更好的解决方案?
您可以在此处找到一个伪示例:http://jsfiddle.net/mbreton/bff7D/
var App = Ember.Application.create({
LOG_TRANSITIONS: true
});
App.Router.map(function(){
this.resource('application', {path:"/:globalParam"}, function (){
this.route('detail', {path:"/detail"});
});
});
App.ApplicationRoute = Em.Route.extend({
model: function (params){
console.log('Params contains globalParam ?', params);
return params;
}
});
答案 0 :(得分:4)
对于这种任务,有不同的方法。
一种方法可能是reopen
Ember.Route
,并将反序列化代码放在您提供的钩子中,例如:
Ember.Route.reopen({
model: function(params) {
//do your task...
this._super(params);
}
});
另一种方法可能是将超类定义为@ sly_7并将其用作所有路线的蓝图,例如:
App.GeneralRoute = Ember.Route.extend({
model: function(params) {
//do your task
return params;
}
});
App.SomeRoute = App.GeneralRoute.extend();
希望它有所帮助。
答案 1 :(得分:0)
最后在与EmberJS撰稿人交谈之后。处理我们问题的最好方法是用资源完全包装应用程序。你可以在这里看到一个例子: http://jsfiddle.net/mbreton/ztzyK/2/
var App = Ember.Application.create({
LOG_TRANSITIONS: true
});
App.Router.map(function(){
this.resource('global', {path:"/:globalParam"}, function (){
this.route('index');
this.route('detail');
});
});
App.IndexRoute = Em.Route.extend({
redirect: function (){
this.transitionTo("global.index", {globalParam: "Youhou"});
}
});
App.GlobalRoute = Em.Route.extend({
setupController: function (controller, model){
// only executed at the begining
console.log('Model', model);
}
});