2016-02-05 4 views
0

У меня есть вложенное маршрут, который ведет себя так же, как менее вложенную версию себя:Доступа к вложенным параметрам маршрута от родительского маршрута/шаблона

/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) из дочернего маршрута в родитель?

ответ

1

Вы можете избавиться от этого .set не является ошибкой функции, используя глобальные Ember.set.

Таким образом, вместо того, чтобы:

parentModel.coverageId = params.coverageId; 

Try:

Ember.set(parentModel, 'coverageId', params.coverageId); 
+0

Спасибо - это прекрасно работает.Я * ожидал * что-то подобное, чтобы быть доступным, но наткнулся на неправильную документацию, что привело меня к мысли, что не было функции 3-arg 'set()': http://emberjs.com/api/classes/ Ember.Object.html # method_set Все еще привыкает к структуре docs/class Ember. –

Смежные вопросы