Как получить доступ к родительской модели во вложенном маршруте индекса с помощью 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, я ищу способ создать новую модель, используя какой-то мета-день со дня (родительской) модели, но поскольку модель дня еще не знает об этом назначении, я не знаю, как связать их до тех пор, пока назначение не будет создано /, и фиксация будет отключена.
Любая помощь будет высоко оценена
Ответы
Ответ 1
Внутри крюка модели AppointmentIndexRoute
вы можете использовать modelFor ('day') для доступа к родительской модели. Например:
App.AppointmentIndexRoute = Ember.Route.extend({
model: function(params) {
day = this.modelFor("day");
...
}
});
Еще один пример: emberjs 1.0.0pre4 как передать объект контекста ресурсу "... Index" маршрут?
Ответ 2
Что делать, если я не использую данные ember? Как получить родительский идентификатор в маршруте, например
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);
}
});
EDIT:
Я нашел обходной путь, он не идеален, но работает точно так, как я этого хочу.
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'});
});
});
И в моем маршруте рабочего процесса я могу получить доступ к workpace_id jus, поскольку я ожидаю от свойства params:
App.WorkflowShowRoute = Em.Route.extend({
model: function(params) {
return this.store.find('workflow', params.workflow_id, params.workspace_id);
}
});
Наконец, вот моя ссылка - внутри рабочей области .show route helper:
{{#each workflow in workflows}}
<li>
{{#link-to 'workflow.show' this.id workflow.id}}{{workflow.name}}{{/link-to}}
</li>
{{/each}}