如何使用 ember.js 访问嵌套索引路由中的父模型?
Posted
技术标签:
【中文标题】如何使用 ember.js 访问嵌套索引路由中的父模型?【英文标题】:How to access a parent model within a nested index route using ember.js? 【发布时间】:2013-01-20 11:26:20 【问题描述】:我有以下路线结构
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 中时,我正在寻找一种方法来使用日(父)模型中的某个元日创建新模型,但由于日模型尚不知道此约会,我不确定如何将它们关联起来,直到创建约会/并触发提交。
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:在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?
【讨论】:
我喜欢它这么简单 - 感谢您的快速回复! 请注意,现在(Ember 2.0)您需要使用路由的完整路径,因此它将是this.modelFor('days.day')
@andorov 我错过了什么吗?看起来日路线没有嵌套在日之下。他们是兄弟姐妹。
是的,你是对的。但是我相信 pre-2.0 会让你摆脱非绝对模型调用【参考方案2】:
如果我不使用 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');
);
);
在我的工作流程路线中,我可以按照我对 params 属性的期望访问 workspace_id:
App.WorkflowShowRoute = Em.Route.extend(
model: function(params)
return this.store.find('workflow', params.workflow_id, params.workspace_id);
);
最后,这是我在workspace.show route helper中的链接:
#each workflow in workflows
<li>
#link-to 'workflow.show' this.id workflow.idworkflow.name/link-to
</li>
/each
【讨论】:
您将数据存储在哪里(如果您不使用 ember-data 存储)?你有本地的身份地图或类似的东西吗? 我使用eviltrout.com/2013/03/23/ember-without-data.htmleviltrout.com/2013/03/23/ember-without-data.html 介绍的技术创建了自己的商店以上是关于如何使用 ember.js 访问嵌套索引路由中的父模型?的主要内容,如果未能解决你的问题,请参考以下文章
Ember JS 过渡到嵌套路由,其中所有路由都是视图中的动态段