如何在Ember中获取子路由的路由参数

时间:2014-10-07 14:21:14

标签: ember.js routing

我想列出使用ember应用程序的人员约会。我的路线定义如下:

this.resource('person', { path: "person/:personid/" }, function () {
    this.route('appointments', { path: "appointments/:date" });
});

现在我有2个模板

  1. person - 模板:在顶部显示此人的姓名,然后{{outlet}}

  2. 约会 - 模板:有一个向后,日期和转发按钮,用于浏览日期以及列出的约会

  3. 约会控制人通过

    处理日期导航
    controller.transitionToRoute("person.appointments",mydatevar)
    

    这也是按钮,因为它在同一条路线上。我不喜欢那样。

    我尝试了不同的方法,但总是当我将导航与约会列表分开时,我需要以某种方式处理两个控制器或路径中的日期。

    导航需要知道约会路线的"子路由" - 参数的状态。我认为这是完全错误的。

    我现在很困惑: - (

    任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

有两种方法。

1. needs: http://emberjs.com/guides/controllers/dependencies-between-controllers/
2. send: http://emberjs.com/api/classes/Ember.Route.html#method_send

您可以在约会控制器上设置日期并使用needs以便将数据共享回person控制器。这样,您可以在人员控制器上拥有约会日期的别名。

App.PersonController = Em.ObjectController.extend({
  needs: 'appointments',
  date: Ember.computed.alias('controllers.appointments.date') // whatever the date property is
});

您可以向父路线发送操作,通知它日期已更改。

App.PersonRoute = Em.Route.extend({
  actions: {
    dateChanged: function(newDate){
      this.controller.set('date', newDate);
    }
  }
});

App.AppointmentsRoute = Em.Route.extend({
   model: function(params){
     this.send('dateChanged', params.date);
     ...
   }
});