Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么当我用';id';最后在安伯斯?_Javascript_Url_Ember.js - Fatal编程技术网

Javascript 为什么当我用';id';最后在安伯斯?

Javascript 为什么当我用';id';最后在安伯斯?,javascript,url,ember.js,Javascript,Url,Ember.js,我有这样的嵌套路线 App.Router.map(function() { this.resource('twod', function() { this.resource('twoduser', { path : '/:user_id' }); }); this.resource('threed'); }); 我有一个由{{link to}}生成的列表,每当我点击其中任何一个,它就会显示“twoduser”的模

我有这样的嵌套路线

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

});
我有一个由
{{link to}}
生成的列表,每当我点击其中任何一个,它就会显示“twoduser”的模板,这就是我想要做的,好的,它会像这样更新url

http://ember.local/#/twod/2
那是以前,

http://ankur.local/#/twod
每当我刷新url时,页面就会变为空白,我在控制台上看到这个

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

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

如果要使用
函数,必须定义
findBy。它在您点击时起作用,但在重新加载时不起作用的原因是,在链接到
中,它隐式地假设当前对象是新路由的
模型
,它只是直接传递给控制器,绕过
模型
钩子。当您点击reload时,将执行
model
钩子,但由于您试图调用一个不存在的方法而失败

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

App.Twod.reopenClass({
    findAll : function() {
        // your find all function here
    },
    findBy : function(id){
        // your code to find by id here
    }
});

我也犯了类似的错误。我正在刷新嵌套资源(例如
/users/1/photos/2
)的内部,但我没有一个api端点(例如
/api/photos/1
)来请求单个照片对象。我添加了一个端点,它自己修复了。在修复之前,我试图依靠
/api/users/
中的索引api端点或侧加载,但正如Jeremy所解释的,当您刷新时,它将最深的路径作为模型,并根据该模型进行查找


希望这对别人有帮助

DS.Model
上没有
findBy()
方法(假设您使用的是ember数据0.13),请尝试
find(params.user\u id)
。我没有使用ember数据,我实际上是使用Ajax调用来获取数据。你可以看到我的最新编辑。