我有一个主干 js 应用程序,它有一个看起来像这样的路由器:
var StoreRouter = Backbone.Router.extend({
routes: {
'stores/edit/:id': 'edit'
},
edit: function(id){
var store = new Store({id: id});
store.fetch({success: function(){
var editStoresView = new EditStoresView({
el: ".wrapper",
model: store
});
}});
}
});
var storeRouter = new StoreRouter();
Backbone.history.start({ pushState: true, hashChange: false });
我的模型看起来像:
var Store = Backbone.Model.extend({
urlRoot: function(){
if (this.isNew()){
return "/stores";
} else {
return "/stores/" + this.id;
}
}
});
在 Chrome 的 JS 控制台中,显示有一个针对 /stores 网址的 GET 请求,而它应该向 /stores/ID_HERE 发出请求>.
最佳答案
主干uses a model's id
field to determine if it's new or not ,并且在构建它时将其传递进去。
您可以跳过一些步骤在编辑时延迟加载模型 - 也就是说,在尝试编辑时仅获取
- 但更改您的urlRoot
可能更容易> 属性为简单的“/stores/”。 Backbone will use that urlRoot
property, along with the model's ID, to construct the URL 。这是有道理的;如果您有一个 id 为 3 的 Store
模型,则无论其"new"状态如何,您都需要点击“/stores/3”来加载它。
如果您怀疑您的应用可以构建没有 ID 的 Store
,您可能需要覆盖 Store
的 url
如果在没有 ID 的模型上调用该函数,则会抛出异常。
关于javascript - 从 URL 问题获取模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24658707/