ApplicationRoute是处理全局反序列化的最佳方法吗?

时间:2013-06-25 14:18:00

标签: javascript ember.js url-routing

在我的项目中,我们需要在应用程序的所有路径上反序列化相同的参数。我问在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;
    }
});

2 个答案:

答案 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);
    }
});