У меня возникла проблема при преобразовании с Ember 1.0-pre2 в последний мастер (43354a98) и новый маршрутизатор, а именно -
Если у меня есть маршрут, который загружает только имя и идентификатор для группы записей и пытается связать каждую из этих записей с другим маршрутом, который должен отображать полную модель, когда я прихожу на новый маршрут, новая модель никогда не загружается, а имена и идентификаторы являются единственными доступными атрибутами.
Пример кода:
App.Router.map(function() {
this.route("index");
this.resource("birds");
this.resource("bird", {
path: "/birds/:bird_id"
});
});
App.BirdsController = Ember.ArrayController.extend({
birds: [
{
name: "Pigeon",
id: "b.15"
}, {
name: "Chicken",
id: "b.133"
}, {
name: "Turkey",
id: "b.126"
}, {
name: "Ostrich",
id: "b.4"
}, {
name: "Barn Owl",
id: "b.47"
}
]
});
App.BirdRoute = Ember.Route.extend({
model: function(params) {
return App.Bird.find(params.bird_id);
}
});
{{#each bird in birds}}
<li>{{#linkTo "bird" bird}}{{bird.name}}{{/linkTo}}</li>
{{/each}}
где App.Bird.find() запускает некоторый XHR для создания Ember.Object из набора удаленных API (не используя данные ember-data). Список птиц жестко закодирован в контроллер только для этого примера, чтобы упростить проблему; в моем реальном приложении список исходит из удаленного API.
Поведение, которое я вижу, заключается в том, что если вы начинаете/птицы и нажимаете одну из ссылок, маршрутизатор переходит на "птицу", и вы приходите на /#/birds/b.5, но App.Bird.find() никогда не вызывается, и единственными данными, которые у меня есть на странице, являются "имя" и "id". Однако, если вы затем перезагрузите страницу, она вызывает приложение App.Bird.find() и правильно создает и отображает модель.
Есть ли способ принудительно удалить десериализацию из идентификатора в URL-адресе или просто передать идентификатор linkTo, а не объект, который он будет считать завершенным? У меня была аналогичная реализация, отлично работающая со старым маршрутизатором.