1

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');
            }
        })
    })
})
});
4

0 に答える 0