У меня есть пример маршрута:
this.route('client', {path: ':id'});
Я могу получить доступ к этому в моем маршруте следующим образом:
model: function(params) {
console.log(params.id);
}
Как мне получить доступ к :id
в моем контроллере?
У меня есть пример маршрута:
this.route('client', {path: ':id'});
Я могу получить доступ к этому в моем маршруте следующим образом:
model: function(params) {
console.log(params.id);
}
Как мне получить доступ к :id
в моем контроллере?
Вот как я это делаю в своем приложении. Не уверен, что это лучший подход.
App.IndexRoute = Em.Route.extend({
model: function(params) {
this.set('params', params);
},
setupController: function(controller, model) {
controller.set('params', this.get('params'));
this._super(controller, model);
}
});
В качестве альтернативы вы также можете выполнить поиск контейнера внутри вашего контроллера. Но я действительно не думаю, что это хороший подход. Вот пример.
this.get('container').lookup('router:main').router.currentHandlerInfos
.findBy('name','index').params
Там есть функция сериализации внутри маршрута, с которой вы можете воспользоваться. Здесь для него Документация API. Однако в вашем контексте вы можете просто сделать это:
App.IndexRoute = Em.Route.extend({
model: function(params) {
console.log(params.client_id);
},
serialize: function(model){
return { client_id : model.id };
}
});
Сообщите мне, если это сработает!
Я также заметил ошибку в определении маршрута. Вероятно, это должно быть
this.route('client', {path: '/:client_id'});
или
this.route('client', {path: '/client/:client_id'});
Я только что наткнулся на этот вопрос, так как мне тоже было интересно, как лучше всего это сделать. Я решил пойти по пути возвращения хеша из модели, а не устанавливать параметры на маршруте.
Итак, в вашем случае я бы сделал следующее:
model() {
Ember.RSVP.hash({client: <get client>, id: id});
}
И затем в контроллере или шаблоне я могу получить доступ к клиенту, вызвав
model.client
и получить идентификатор, вызывая
model.id
Я лично считаю, что это более чистый способ доступа к id по сравнению с настройкой параметра на маршруте. Конечно, я предполагаю, что идентификатор еще не установлен на модели. В противном случае все это упражнение бессмысленно.
Если ваш идентификатор является частью вашей модели, вы можете получить ее из самой модели. Например, если у вас есть маршрут с объектом Билл в качестве модели и счета путей /: billId, на вашем контроллере вы можете получить его следующим образом:
this.get( 'модель'). Идентификатор