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调用来获取数据。你可以看到我的最新编辑。