cjr*_*uck 17 javascript model-view-controller backbone.js
说我有路线设置:
'photos/:id' : 'showPhoto'
Run Code Online (Sandbox Code Playgroud)
有人www.mysite.com/photos/12345与朋友分享网址:
当他们的朋友点击共享链接时,showPhoto会以12345作为id传回.我无法弄清楚如何从服务器获取模型,因为即使设置其id属性并调用fetch(),backbone也认为模型isNew和ajax请求url只是/photos代替/photos/12345:
showPhoto: (id) ->
photo = new models.Photo _id:id
photo.fetch #does a GET to /photos, I would have expected it to request /photos/12345
success: () ->
render photo view etc...
Photo = Backbone.Model.extend
idAttribute: '_id'
urlRoot: '/photos'
Run Code Online (Sandbox Code Playgroud)
该模型Photo通常是集合的一部分,但在这种情况下,有人正在直接访问该站点,并且只希望查看一张照片的数据,因此该集合不会在此应用程序状态下实例化.
解决方案是加载整个照片集然后使用collection.getById(id)?当我只想加载一个模型的属性时,这似乎效率太低.
Der*_*ley 25
如果您没有将模型作为集合的一部分,则必须手动告诉模型完整的URL.它不会自动将id附加到您指定的urlRoot.你可以指定一个函数作为urlRoot来执行此操作:
Photo = Backbone.Model.extend({
urlRoot: function(){
if (this.isNew()){
return "/photos";
} else {
return "/photos/" + this.id;
}
}
});
Run Code Online (Sandbox Code Playgroud)
Backbone使用id模型来确定它是否是新的,所以一旦你设置了这个,这个代码应该可以正常工作.如果没有,你总是可以检查if语句中的id而不是检查isNew.