从URL问题中获取模型
Get Model From URL Issue
我有一个骨干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控制台,它显示有一个GET请求只是/stores url,当它应该发出请求/stores/ID_HERE。
Backbone使用模型的id
字段来确定它是否是新的,并且在构造它时将其传递进来。
你可以跳过一些圈做延迟加载的模型编辑-也就是说,只有fetch
时,试图编辑-但它可能更容易改变你的urlRoot
属性为一个简单的"/stores/"。Backbone将使用该urlRoot
属性以及模型的ID来构造URL。这是有道理的;如果你有一个id为3的Store
模型,你会想要点击"/stores/3"来加载它,而不管它的"新"状态。
如果你怀疑你的应用程序有可能构造一个没有ID的Store
,你可能想重写你的Store
的url
函数,如果它在一个没有ID的模型上被调用,就抛出一个异常。
是的,这是有意义的,model . isnew()用于检查模型是否具有id属性(在这里查看更多信息,http://backbonejs.org/#Model-isNew)。这样主干就知道什么时候执行保存或放置到服务器。
要使用ID从服务器获取数据,您需要这样做:
var store = new Store({id: id}); // Ok here we're setting an id on our model.
var Store = Backbone.Model.extend({
urlRoot: function(){
return "/stores/"
}
GetData : function (){
this.fetch()
}
});
如果你的模型有任何属性,当你执行取回,所有的属性将被发送到服务器。
所以你的url必须是相同的,但如果你的模型有一个Id属性,url将是类似'stores/1'的东西。如果没有,将只有'stores/'
在你的API中,你需要有两个方法,一个需要一个(int)形参,另一个不需要任何参数。
希望能有所帮助。
相关文章:
- 如何使用backbone.js从集合中获取模型名称
- Django 使用 JSON 获取模型方法的值
- 在Waterline中动态定义和获取模型
- 在Backbone中通过CID设置和获取模型
- 从Ember视图获取模型属性
- 在不同的模型中获取模型id会在主干中创建表单
- 余烬需要刷新浏览器才能获取模型数据
- Ember.js:使用模型实例的路由获取模型实例的 url 字符串
- 主干视图在模型完成提取后获取模型变量
- 有没有办法轻松获取 C# 模型的 JavaScript 表示形式
- 角度形式 - 从包装器中的字段获取模型
- 如何在获取操作后获取模型属性
- 从 JSON.file 获取模型并将其存储在本地存储主干
- 如何从主干中的嵌套 json 对象获取模型属性
- 在单独的Javascript文件中获取模型值
- 如何获取模型的哪个特定属性已更改?这在Backbone.js中可能吗
- 如何按id从集合中获取模型
- 在ExtJS中从GridPanel获取模型
- 如何获取模型内部的组件引用保存回调函数
- Ember.js渲染模板在其他模板中没有获取模型