ember-dataに奇妙な問題があります。あるエントリポイントでは、サーバーからデータが読み込まれますが(サーバーにログオンして何が起こっているかを確認できます)、別のエントリポイントでは、ルートをと同じ状態に変更します。最初のオプション、ember-dataはサーバーにまったくアクセスしません。
なぜこれが起こっているのか理解できません。
私のアプリでは、ブラウザーで/ postsを指定すると、サーバーからデータが読み込まれ、すべて問題ありません。しかし、/ settingsをポイントし、リンクをたどってルートをposts.indexに変更すると、ember-dataはサーバーにアクセスしません。
また、エントリポイントが/ posts / newで、新しい投稿を作成しようとすると、エラーが発生します。
http://localhost:3000/api/unknown%20mixin)s 404 (Not Found)
何が問題になる可能性がありますか?
編集:コントローラーのinit関数を呼び出しfindAll()
てデータをロードすると、コントローラーが最初にインスタンス化されたときにデータがロードされ、すべてが正常になります。しかし、この奇妙な動作はまだ理解できません。バグですか?
EDIT2:この問題を示すためにgithubプロジェクトを作成しました-https: //github.com/bsphere/ember-data-test
App.Router = Ember.Router.extend({
enableLogging: true,
root: Ember.Route.extend({
showposts: Ember.Route.transitionTo('posts.index'),
showSettings: Ember.Route.transitionTo('settings.index'),
index: Ember.Route.extend({
route: '/',
connectOutlets: function(router) {
router.transitionTo('posts.index');
}
}),
settings: Ember.Route.extend({
route: '/settings',
connectOutlets: function(router) {
router.get('applicationController').connectOutlet('navigation', 'navigation');
},
index: Ember.Route.extend({
route: '/',
connectOutlets: function(router) {
router.get('applicationController').connectOutlet('content', 'settings');
router.set('navigationController.selected', 'settings');
}
})
}),
posts: Ember.Route.extend({
newpost: Ember.Route.transitionTo('root.posts.new'),
editpost: Ember.Route.transitionTo('root.posts.edit'),
route: '/posts',
connectOutlets: function(router) {
router.get('applicationController').connectOutlet('navigation', 'navigation');
},
index: Ember.Route.extend({
route: '/',
connectOutlets: function(router) {
router.set('navigationController.selected', 'posts');
router.get('applicationController').connectOutlet('content', 'posts',
App.store.findAll(App.Post));
}
}),
new: Ember.Route.extend({
route: '/new',
connectOutlets: function(router) {
router.set('navigationController.selected', '');
router.get('applicationController').connectOutlet('content', 'post',
App.store.createRecord(App.Post));
router.set('postController.isEditing', false);
},
cancel: function(router) {
router.transitionTo('index');
},
didCreate: function(router) {
router.transitionTo('index');
}
}),
edit: Ember.Route.extend({
route: '/:id/edit',
connectOutlets: function(router, post) {
router.set('navigationController.selected', '');
router.get('applicationController').connectOutlet('content', 'post',
App.store.find(App.Post, post.get('id')));
router.set('postController.isEditing', true);
},
deserialize: function(router, context) {
return App.store.find(App.Post, context.id)
},
serialize: function(router, post) {
return {
id: post.get('id')
}
},
cancel: function(router) {
router.transitionTo('index');
},
didUpdate: function(router, post) {
router.transitionTo('index');
}
})
})
})
});