1

我对 ember-data 有一个奇怪的问题,在一个入口点上它从服务器加载数据(我启用了登录服务器以查看发生了什么),但在另一个入口点上,然后将路由更改为与第一个选项,ember-data 根本不访问服务器。

我简直无法理解为什么会这样。

在我的应用程序中,如果我将浏览器指向 /posts,则会从服务器加载数据,一切正常。但是如果我指向 /settings,然后按照链接更改到 posts.index 的路由,则 ember-data 不会访问服务器。

另外,如果我的入口点是 /posts/new 并且我尝试创建一个新帖子,我会收到一个错误: http://localhost:3000/api/unknown%20mixin)s 404 (Not Found)

可能是什么问题?

编辑:如果我通过调用findAll()控制器的 init 函数来加载数据,则在首次实例化控制器时加载数据并且一切都很好..但我仍然不明白这种奇怪的行为。这是一个错误吗?

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