Ember将一个参数从一个路由发送到另一个路由的“适当”方式是什么?例如,我有两条路线定义如下:
this.resource('activities', { path: '/activities/:on_date' }, function() {
this.route('new');
});
当在ActivitiesRoute上时,用户可以看到可能的活动的下拉列表。当他们选择的东西,它转换到ActivitiesNewRoute:
this.transitionToRoute('activities.new');
我知道在transitionToRoute(route,model)方法中有一个第二个参数可用,但是它是为了传递一个模型,我假设这不应该重用于其他参数传递。在这种情况下,下拉列表的选择是选择一个Action模型ID,而ActivitiesNew的模型是一个Activity。
这是我可以工作的三个猜测:
1)使其成为路由器参数
我想我可以改变ActivitiesNew以包含一个“参数”作为路线的一部分:
this.route('new', { path: '/new/:my_parameter' });
我不知道我真的希望它成为URL路径的一部分,但如果这是普遍的惯例,那么我会活着。
2)获取句柄,转换后
在transitionToRoute调用之后,我可以设置新的控制器类的属性。不知道控制器是否会安装,但我想像的是:
this.transitionToRoute('activities.new');
this.get('target').controllerFor('activities.new').set('my_parameter', myValue);
3)使用模型参数
this.transitionToRoute('activities.new',myValue);
我怀疑这是一个主要的不。我没有研究Ember代码,知道这是否可以工作,但似乎违反惯例,所以这是我的“坏选择”。
最佳答案
你可以使用需要的API(阅读here):
App.ActivitiesNewController = Ember.ObjectController.extend({
needs: ['activities']
// Bind the property you need
actionTemplateBinding: 'controllers.activities.actionTemplate'
});
所以你实际需要的是在控制器之间传递参数,这正是需要的。另外,根据需要绑定属性,确保始终保持同步,而不是依赖于正在调用的setupController。
相关文章
转载注明原文:ember.js – 在路由之间传递参数 - 代码日志