如何使用ember.js访问嵌套索引路径中的父模型?

时间:2013-02-05 13:55:23

标签: ember.js

我有以下路线结构

App.Router.map(function(match) {
    this.route("days", { path: "/" });
    this.resource("day", { path: "/:day_id" }, function() {
        this.resource("appointment", { path: "/appointment" }, function() {
            this.route("edit", { path: "/edit" });
        });
    });
});

当我在AppointmentIndexRoute里面时,我正在寻找一种方法来创建一个新的模型,使用从日(父)模型的某个元日,但因为日模型还不知道这个约会我不知道如何关联它们直到创建约会/并且启动提交。

非常感谢任何帮助

2 个答案:

答案 0 :(得分:42)

AppointmentIndexRoute的模型钩子中,您可以使用modelFor('day')访问父模型。例如:

App.AppointmentIndexRoute = Ember.Route.extend({
  model: function(params) {
    day = this.modelFor("day");
    ...
  }
});

另一个例子是:emberjs 1.0.0pre4 how do you pass a context object to a resource "...Index" route?

答案 1 :(得分:3)

如果我不使用ember数据怎么办?如何在

之类的路径中获取父ID
  this.resource('workspace',function () {
    this.resource('workflow', {path: '/:workspace_id/workflow'}, function () {
      this.route('show', {path: '/:workflow_id'});
    });
  });

此代码不起作用:

App.WorkflowShowRoute = Em.Route.extend({
  model: function(params) {
      var ws  = this.modelFor('workspace');  //ws is undefined
      return this.store.find('workflow', params.id, ws.id);
  }
});

编辑: 我发现了一种解决方法,它并不理想,但完全符合我的需要。

  this.resource('workspace',function () {
    this.route('new');
    this.route('show', {path: '/:workspace_id'});
    //workflow routes
    this.resource('workflow', {path: '/'}, function () {
      this.route('new', {path:'/:workspace_id/workflow/new'});
      this.route('show', {path: '/:workspace_id/workflow/:workflow_id'});
    });
  });

在我的工作流程路径中,我可以访问workspace_id jus,就像我期望的params属性一样:

App.WorkflowShowRoute = Em.Route.extend({
  model: function(params) {
      return this.store.find('workflow', params.workflow_id, params.workspace_id);
  }
});

最后,这是我在workspace.show路径助手中的链接:

{{#each workflow in workflows}}
  <li>
    {{#link-to 'workflow.show' this.id workflow.id}}{{workflow.name}}{{/link-to}}
  </li>
{{/each}}