J'ai la structure d'itinéraire suivante
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" });
});
});
});
Lorsque je suis à l'intérieur du AppointmentIndexRoute, je cherche un moyen de créer un nouveau modèle en utilisant une méta-journée du modèle day (parent) mais parce que le modèle day ne connaît pas encore ce rendez-vous, je ne sais pas comment les associer jusqu'à ce que le rendez-vous soit créé/et que le commit soit déclenché.
Toute aide serait très appréciée
Depuis le hook de modèle de AppointmentIndexRoute
, vous pouvez utiliser modelFor ('day') pour accéder au modèle parent. Par exemple:
App.AppointmentIndexRoute = Ember.Route.extend({
model: function(params) {
day = this.modelFor("day");
...
}
});
Un autre exemple est ici: emberjs 1.0.0pre4 comment passez-vous un objet de contexte à une route "... Index" de ressource?
Que faire si je n'utilise pas de données ember? Comment puis-je obtenir l'ID parent dans un itinéraire comme
this.resource('workspace',function () {
this.resource('workflow', {path: '/:workspace_id/workflow'}, function () {
this.route('show', {path: '/:workflow_id'});
});
});
Ce code ne fonctionnera pas:
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: J'ai trouvé une solution de contournement, ce n'est pas idéal mais fonctionne exactement comme je le veux.
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'});
});
});
Et dans mon itinéraire de flux de travail, je peux accéder au jus workspace_id comme je l'attends de la propriété params:
App.WorkflowShowRoute = Em.Route.extend({
model: function(params) {
return this.store.find('workflow', params.workflow_id, params.workspace_id);
}
});
Enfin, voici mon lien vers l'intérieur de l'assistant de route workspace.show:
{{#each workflow in workflows}}
<li>
{{#link-to 'workflow.show' this.id workflow.id}}{{workflow.name}}{{/link-to}}
</li>
{{/each}}