IronRouter在路由控制器上扩展数据选项

War*_*arz 10 inheritance meteor iron-router

有没有办法data在使用IronRouter时扩展选项,并且RouteController,当我从超级控制器继承时它似乎被覆盖,子控制器不会扩展定义的data属性.我yieldTemplates在路由上遇到类似问题并使用了解决方法(下划线_extends)但在这种情况下它不起作用:

ApplicationController = RouteController.extend({
     data: function(){
          return {
                 user: Meteor.user()   
         }     
   }
});

ChildController = ApplicationController.extend({
  data: function(){
        return {
               // I expect to inherit Meteor.User ?????
               someData: {}
        }
   }
});
Run Code Online (Sandbox Code Playgroud)

编辑:

在使用underscoreextend继承原型函数的函数之后,我仍然无法继承route使用的定义ChildController

this.route('someRoute', {
   template: 'task_template',
   //tasks is not available on the template
   data: function () {
            var base = ChildController.data.call(this);
            console.log(base);
            return _.extend(base, {
                tasks: Tasks.find({state: 'Open'})
            });
});
Run Code Online (Sandbox Code Playgroud)

Phi*_*Spo 8

我在生产应用程序中使用类似的东西:

Router.route('/test/:testparam', {
    name: 'test',
    controller: 'ChildController'
});

ParentController = RouteController.extend({
    data: function() {
        console.log('child params: ', this.params);
        return {
            foo: 'bar'
        };
    }
});

ChildController = ParentController.extend({
    data: function() {
        var data = ChildController.__super__.data.call(this);
        console.log(data);
        return data;
    }
});
Run Code Online (Sandbox Code Playgroud)

使用__super__似乎可以做到这一点!
您可以使用_.extend来扩展数据(http://underscorejs.org/#extend)