0

我有这样的嵌套路线,

App.Router.map(function() {
    this.resource('twod', function() {
        this.resource('twoduser', {
            path : '/:user_id'
        });
    });
    this.resource('threed');

});

我有一个由生成的列表{{link-to}},每当我点击其中任何一个时,它都会向我显示“twoduser”的模板,这就是我打算做的,好吧,它会像这样更新网址,

http://ember.local/#/twod/2

这是以前,

http://ankur.local/#/twod

每当我刷新网址时,页面都会变为空白,我会在控制台上看到它,

Error while loading route:
TypeError: App.Twod.findBy is not a function

这是 twoduser 的路由方法:

App.TwoduserRoute = Ember.Route.extend({
    model: function(params){
        return App.Twod.findBy('id', params.user_id);
    }
});

还要注意的一件事是我正在使用 Ajax 获取数据,

App.Twod.reopenClass({
    findAll : function() {
        return new Ember.RSVP.Promise(function(resolve, reject) {
            $.getJSON("http://pioneerdev.us/users/index", function(data) {
                var result = data.users.map(function(row) {
                    return App.Twod.create(row);
                });
                resolve(result);
            }).fail(reject);
        });
    }
});

我能做些什么来解决这个问题?

4

2 回答 2

2

findBy如果你想使用它,你必须定义它。它在您单击时起作用,但在您重新加载时不起作用的原因是,link-to它隐含地假定当前对象是model新路由的对象,并且它只是绕过model钩子直接传递给控制器​​。当你点击重新加载时,model钩子被执行,但因为你试图调用一个不存在的方法而失败。

如果你需要一个findBy函数,你应该在你的模型中创建它,在你的方法旁边findAll

App.Twod.reopenClass({
    findAll : function() {
        // your find all function here
    },
    findBy : function(id){
        // your code to find by id here
    }
});
于 2013-09-14T23:00:00.630 回答
0

我有一个类似的错误。我在嵌套资源中刷新,例如/users/1/photos/2,但我没有 api 端点/api/photos/1来请求单个照片对象。我添加了一个端点并自行修复。在修复之前,我试图依靠索引 api 端点或侧载,/api/users/但正如 Jeremy 解释的那样,当您刷新时,它会采用最深的路径作为模型并首先基于该路径进行查找。

希望这对某人有帮助!

于 2013-10-13T20:03:52.960 回答