Предположим, что у вас есть следующие маршруты в приложении Ember.
App.Router.map(function() {
this.resource('series', function() {
this.resource('serie', { path: '/:serie_id' }, function() {
this.resource('seasons', function() {
this.resource('season', { path: '/:season_id' }, function() {
this.resource('episodes', function() {
this.resource('episode', { path: '/:episode_id' });
})
});
});
});
});
});
Как мне связать конкретный эпизод с помощью помощника linkTo
, который предоставляет Handlebars? Другими словами, как Эмбер выясняет, какими должны быть другие параметры URL-адреса, то есть serie_id
и episode_id
? В документации указано, что я должен передать модель episode
на маршрут episode
, как показано ниже.
{{#linkTo "episode" episode}}
Это ссылка на следующую структуру URL.
/series/:serie_id/seasons/:season_id/episodes/:episode_id/
Когда я использую помощник linkTo
, подобный этому, Ember выдает ошибку, сообщающую мне, что он не может вызывать get
с id
на undefined
. Я предполагаю, что он использует модель episode
, чтобы выяснить, что такое serie_id
и episode_id
, и я предполагаю, что модель должна соответствовать определенному соглашению (структуре или чертежу) для Ember, чтобы найти эти id
с.
Это те аспекты, которые мне труднее всего встретить в Ember. Это не очень прозрачно, даже если вы используете Ember в режиме отладки. Любые указатели или ссылки очень ценятся.
ОБНОВЛЕНИЕ 1: После некоторого копания я узнал, что метод route serialize
является ключевым элементом в выполнении этого. Однако, когда я использую помощник linkTo
, как показано выше, модель, переданная методу маршрута serialize
по какой-либо причине undefined
(хотя это не когда передается помощнику linkTo
. к этому открытию можно найти здесь.
ОБНОВЛЕНИЕ 2: Оказывается, метод serieSeason
route serialize
получает неправильную модель, эпизод вместо сезона, когда создается ссылка. Однако неясно, почему он получает неправильную модель. Где параметр model
метода serialize
исходит из?
ОБНОВЛЕНИЕ 3: помощник linkTo
отлично работает, если я возвращаю статические данные из метода serialize
для каждого используемого маршрута, что означает, что помощник linkTo
не участвует в проблеме.