Backbone在创建Collection时为所有人配置url。有没有办法在以后更改此网址?
以下示例显示了/product
处的2个POST和POST
处的2个/product/id/stock
。最后POST
不起作用,Backbone连接id并尝试PUT
它,但我不知道为什么。
products.create({ name: 'American Pastoral', price: 8 });
products.create({ name: 'The Grapes of Wrath', price: 10 });
products.each(function(product) {
var id = parseInt(product.get('id'));
stocks.setId(id);
stocks.create({ id: id, quantity: 12 });
}
股票收集:
Backbone.Collection.extend({
url: function() {
return this.url;
},
parse : function(resp) {
return resp.stock;
},
setProduct: function(id) {
this.url = '/product/'+id+'/stock';
}
});
不会工作。
答案 0 :(得分:6)
Backbone.js将在保存现有模型时使用模型的url。不太清楚你想做什么 - 例如,我不知道股票是什么。无论如何,您的代码可能需要与下面的代码类似,您不应该动态更改URL:
Product = Backbone.Model.extend({
url: function() {
return '/product/' + id + '/stock';
}
});
ProductList = Backbone.Collection.extend({
model: Product,
url: '/product'
}):
然后,Backbone.js将使用集合url进行创建,使用模型url进行保存。我认为你需要单独留下网址,让骨干网的默认功能处理它。
答案 1 :(得分:3)
我遇到了本质上相同的问题。似乎Backbone的模式是锁定模型和集合中的相对URI,并允许框架使用这些来构建给定资源的最终URI。这对于不会更改的Restful URI模板非常有用。但是在纯RESTful服务中,您可能希望相对URI的列表作为给定资源的一部分而下降。您可能需要执行此操作的原因有很多,显而易见的是,如果资源的URI移动了。
据我所知,Backbone无法轻松干净地处理这个问题。在上面的问题中,我的解决方法是基本上使用OLN重新定义模型url方法。您可以在获取集合或第一次初始化集合时执行此操作。基本上构建逻辑来自己处理URI列表。
答案 2 :(得分:2)
我知道这是一个老问题,但我花了一些时间来确定如何解决我的问题。在fetch操作下的手册中有这个小问题:
jQuery.ajax options can also be passed directly as fetch options, so to fetch a specific page of a paginated collection: Documents.fetch({data: {page: 3}})
传递给data参数的对象被添加为URL GET变量。因此,如果已存在变量,则URL将变为URL?page = 3或URL?x = 1& page = 3。