我正在尝试操纵backbone的fetch方法来处理一些非标准的api。 api的工作方式如下:
api/products/[page]?param1=val¶m2=val
例如:
api/products/2?budget=low&categories=all
相当于获得预算较低且包含所有类别的第二页结果。
我可以通过以下格式在查询字符串之后传递参数:
self.productsItemsCollection.fetch({ success : onDataHandler, dataType: "json", data: { budget: 'low', categories: 'all' } });
但我不确定如何处理分页,因为它位于?问号。
以下是集合的设置方式:
define([
'underscore',
'backbone',
'models/products/ProductsItemsModel'
], function(_, Backbone, ProductsItemsModel){
var ProductsItemsCollection = Backbone.Collection.extend({
model: ProductsItemsModel,
initialize : function(models, options) {}, //MH - need to pass filters to this function
url : function() {
return '/api/products/'; //MH - need to pass page number to be appended to this url
},
parse : function(data) {
debugger;
return data.items;
}
});
return ProductsItemsCollection;
});
给定此 api URL 结构,如何在 Backbone 的 fetch 命令中包含分页?
最佳答案
您的做法是正确的,因为 Backbone 可以使用函数的返回值作为其“url”值。我个人会做的是在集合上设置一个 page 属性(通过类似 this.page 的内容引用),并将其包含在 url 函数的输出中。
initialize: function() {
this.page = 1; // Or whatever the default should be
},
url: function() {
return '/api/products/ + this.page;
}
问题就变成了更新页面属性,这可以像“ProductsItemsCollection.page = 2;”一样简单。就我个人而言,我还会添加第二个 fetch 方法来将页面更新和 fetch 包装到单个方法调用中。
fetch2: function(page, options) {
if (page) {
this.page = page;
}
return this.fetch(options);
}
关于javascript - 将参数传递给backbone fetch url以处理非标准api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26620339/