ember.js – 在路由之间传递参数

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 – 在路由之间传递参数 - 代码日志