Backbone:如何使用fetch传递参数?

时间:2015-02-17 19:45:32

标签: backbone.js

我已阅读有关此问题的Stackoverflow上的所有帖子,并尝试了以下内容:

1)添加$.param({})包装器

  messages.fetch({
    data: $.param({ limit: 14 }),
  });

2) 将traditional设为true

  messages.fetch({
    data: { limit: 14 },
    traditional: true
  });

3) 将processData设为true

  messages.fetch({
    data: { limit: 14 },
    processData: true,
  });

尽管如此,这些方法都不起作用。我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:0)

对于我认为你要做的事情,你需要在模型/集合上使用“url”属性。 Fetch是GET类型,而不是PUT或POST,因此您不会向服务器发送“数据”。尝试以下内容:

请注意 $ .param({limit:14})返回“limit = 14”重点是,这不是服务器的有效序列化对象明白了。

如果您的“ fetch ”方法是“ HttpGet

var MyModel = Backbone.Model.extend({

    // place holder for models api. Also look at: http://backbonejs.org/#Model-urlRoot
    _baseUrl = 'api/somewhere/great'

    // see: http://backbonejs.org/#Model-url
    url: function() {
        // this returns 'api/somewhere/great?limit=14';
        return this._baseUrl + '?' + $.param({ limit: 14 });
    }
});

现在,如果您想要 HttpPut HttpPost ,那么您可以覆盖“fetch”并执行以下操作:

var MyModel = Backbone.Model.extend({

    url = 'api/somewhere/great'

    fetch: function(options) {
        options = options || {
            data: {
                limit: 14
            }
        };

        /*
            signature method of sync: Backbone.sync = function (method, model, options)
        */
        return this.sync("create", this, options);
    }
});

参考文献: