javascript - 将参数传递给backbone fetch url以处理非标准api

标签 javascript jquery ajax backbone.js backbone.js-collections

我正在尝试操纵backbone的fetch方法来处理一些非标准的api。 api的工作方式如下:

api/products/[page]?param1=val&param2=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/

相关文章:

jquery - 我怎样才能从类(class)中删除角色?

javascript - Jquery,从匹配正确模式的所有div中读取数据属性

php - 未捕获的语法错误意外数字 JSON.parse

php - ajax收到的链接无法点击

javascript - 当浏览器窗口的高度较小时,阻止固定元素滚动到页脚

ajax - Dart:querySelector 的范围

javascript - 防止innerHTML属性中的XSS

javascript - UglifyJS2 抛出解析错误(意外的标记 : name (Abide)) everytime

javascript - 如何在javascript中比较日期?

javascript - 如何在触摸设备上滚动时停止 JS 触发