У меня есть вложенное маршрут, который ведет себя так же, как менее вложенную версию себя:Доступа к вложенным параметрам маршрута от родительского маршрута/шаблона
/code/class/MyFile.java
/code/coverage/:coverageId/class/MyFile.java
Несколько пояснений, но coverage
маршрута украшает страницу с некоторыми дополнительное выделение/детали, которые отсутствуют в «нормальной» версии.
Однако мой шаблон code
определяет боковую панель, которая включает дерево навигации для доступа к другим файлам кода. При просмотре страницы /coverage/
я хотел бы, чтобы боковая панель отображала ссылки по-разному, гарантируя, что вложенный маршрут поддерживается при нажатии.
Моя проблема:
Я не могу показаться, чтобы найти способ, чтобы получить доступ к :coverageId
в code
пути или шаблон, чтобы изменить способ отображения ссылки. Мой код маршрута:
export default Ember.Route.extend({
model(params) {
console.log('Coverage ID: ' + params.coverageId);
...
Отпечатки undefined
. Это, по-видимому, имеет смысл, поскольку это параметр , который является «вне сферы действия»?
Мой Некорректное Решение:
Я попробовал это в моем class
маршруту:
export default Ember.Route.extend({
model(params) {
var parentModel = this.modelFor('code');
parentModel.coverageId = params.coverageId;
...
Который, в моем code.hbs
шаблона:
{{#if model.coverageId}}
{{#link-to 'code.coverage.class' model.coverageId fileName}}{{fileName}}
{{/link-to}}
{{else}}
{{#link-to 'code.class' fileName}}{{fileName}}{{/link-to}}
{{/if}}
На самом деле работает! Ссылка отображается правильно при просмотре маршрута coverage
.
Однако: Пока я могу щелкнуть правой кнопкой мыши любой из этих ссылок, чтобы открыть их в отдельной вкладке успешно, если я регулярно нажимать на них, я получаю сообщение об ошибке:
Error: Assertion Failed: You must use Ember.set() to set the `coverageId` property (of [object Object]) to `425988`
Но, конечно, Я не могу использовать parentModel.set('coverageId', params.coverageId);
, потому что он терпит неудачу с:
TypeError: parentModel.set is not a function
Так! Как я могу (1) проверить параметры вложенных маршрутов в родительском (code
) маршруте или (2) правильно ввести известное значение (:coverageId
) из дочернего маршрута в родитель?
Спасибо - это прекрасно работает.Я * ожидал * что-то подобное, чтобы быть доступным, но наткнулся на неправильную документацию, что привело меня к мысли, что не было функции 3-arg 'set()': http://emberjs.com/api/classes/ Ember.Object.html # method_set Все еще привыкает к структуре docs/class Ember. –