Приложение на основе маршрутизатора Ember.js не загружает объект ember-data при обновлении страницы
Я следую за структурой приложения на основе маршрутизатора на основе http://emberjs.com/guides/outlets/.
Я могу следовать и заставить это работать. Но, имея проблемы при загрузке контента, когда страница показывает сообщение (например, /#/posts/2), я подозреваю, что это потому, что этот конкретный пост не загружен.
Какой выход из этого? Разве это не предполагает работать из коробки.
Пример скрипки: http://jsfiddle.net/nachiket/h5Hkm/
App = Ember.Application.create({});
//MODEL
App.Summary = DS.Model.extend({
content: DS.attr('string')
});
App.Post = DS.Model.extend({
title: DS.attr('string'),
summary: DS.hasMany(App.Summary, {embedded: true})
});
App.Post.FIXTURES = [
{id:1, title: 'My first post', summary: [{id:1, content: 'This is summary1'}]},
{id:2, title: 'Another post' , summary: [{id:2, content: 'This is summary2'}]},
{id:3, title: 'Yet another post' , summary: [{id:3, content: 'This is summary3'}]}
];
//STORE
App.store = DS.Store.create({
revision: 4,
adapter: DS.fixtureAdapter
});
//ROUTER
App.Router = Ember.Router.extend({
root: Ember.Route.extend({
index: Ember.Route.extend({
route: '/',
redirectsTo: 'posts'
}),
posts: Ember.Route.extend({
route: '/posts',
showPost: Ember.Route.transitionTo('post'),
connectOutlets: function(router){
router.get('applicationController').
connectOutlet('posts',App.Post.find());
}
}),
post: Ember.Route.extend({
route: '/posts/:post_id',
goBack: Ember.Route.transitionTo('posts'),
connectOutlets: function(router, post) {
router.get('applicationController').connectOutlet('post', post);
}
})
})
});
//CONTROLLERS - VIEWS
App.ApplicationController = Ember.Controller.extend({});
App.ApplicationView = Ember.View.extend({
templateName: 'application'
});
App.PostsController = Ember.ArrayController.extend({
});
App.PostsView = Ember.View.extend({
templateName: 'posts'
});
App.PostController = Ember.ObjectController.extend({
});
App.PostView = Ember.View.extend({
templateName: 'post'
});
App.initialize();
Прямой вывод: http://fiddle.jshell.net/nachiket/h5Hkm/show/light/
Работает: http://fiddle.jshell.net/nachiket/h5Hkm/show/light/
Не работает: http://fiddle.jshell.net/nachiket/h5Hkm/show/light/
2 ответа
Ember Routing передает строку "1" вместо числа 1 методу find для разрешения сообщения. Строка "1" не соответствует ни одному из приборов. Замена ваших приборов (в тестовых целях) на строковые идентификаторы должна работать.
Добавление десериализатора к вашему "почтовому" маршруту должно помочь. Я бы рекомендовал прочитать (по крайней мере, раздел "Сериализация и десериализация состояний") http://trek.github.com/.
Дайте мне знать, если у вас возникнут проблемы с тем, чтобы заставить его работать, и я создам скрипку.