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)
编辑:
在使用underscore和extend继承原型函数的函数之后,我仍然无法继承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)
我在生产应用程序中使用类似的东西:
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)