2

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

2 回答 2

4

对于此类任务,有不同的方法。

一种方法可能是reopenEmber.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();

希望能帮助到你。

于 2013-06-25T14:30:18.157 回答
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);
    }
});
于 2013-06-26T09:04:01.257 回答