首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带参数的Backbone.js获取

带参数的Backbone.js获取
EN

Stack Overflow用户
提问于 2011-07-12 11:48:53
回答 4查看 141.1K关注 0票数 154

遵循documentation,我做到了:

代码语言:javascript
复制
var collection = new Backbone.Collection.extend({
        model: ItemModel,
        url: '/Items'
})

collection.fetch({ data: { page: 1} });

url原来是:http://localhost:1273/Items?[object%20Object]

我期待的是像http://localhost:1273/Items?page=1这样的东西

那么如何在fetch方法中传递params呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-12 12:26:57

更改:

代码语言:javascript
复制
collection.fetch({ data: { page: 1} });

至:

代码语言:javascript
复制
collection.fetch({ data: $.param({ page: 1}) });

因此,不用过多地做这件事,这将在{data: {page:1}}对象中作为options调用

代码语言:javascript
复制
Backbone.sync = function(method, model, options) {
    var type = methodMap[method];

    // Default JSON-request options.
    var params = _.extend({
      type:         type,
      dataType:     'json',
      processData:  false
    }, options);

    // Ensure that we have a URL.
    if (!params.url) {
      params.url = getUrl(model) || urlError();
    }

    // Ensure that we have the appropriate request data.
    if (!params.data && model && (method == 'create' || method == 'update')) {
      params.contentType = 'application/json';
      params.data = JSON.stringify(model.toJSON());
    }

    // For older servers, emulate JSON by encoding the request into an HTML-form.
    if (Backbone.emulateJSON) {
      params.contentType = 'application/x-www-form-urlencoded';
      params.processData = true;
      params.data        = params.data ? {model : params.data} : {};
    }

    // For older servers, emulate HTTP by mimicking the HTTP method with `_method`
    // And an `X-HTTP-Method-Override` header.
    if (Backbone.emulateHTTP) {
      if (type === 'PUT' || type === 'DELETE') {
        if (Backbone.emulateJSON) params.data._method = type;
        params.type = 'POST';
        params.beforeSend = function(xhr) {
          xhr.setRequestHeader('X-HTTP-Method-Override', type);
        };
      }
    }

    // Make the request.
    return $.ajax(params);
};

因此,它将“数据”发送到jQuery.ajax,它将尽最大努力将任何params.data附加到该地址。

票数 215
EN

Stack Overflow用户

发布于 2011-08-23 03:06:19

您还可以将processData设置为true:

代码语言:javascript
复制
collection.fetch({ 
    data: { page: 1 },
    processData: true
});

Jquery会自动将数据对象处理成参数字符串,

但在Backbone.sync功能中,Backbone会关闭processData,因为Backbone会使用其他方法来处理POST、UPDATE…

在Backbone源代码中:

代码语言:javascript
复制
if (params.type !== 'GET' && !Backbone.emulateJSON) {
    params.processData = false;
}
票数 71
EN

Stack Overflow用户

发布于 2013-07-23 20:55:48

另一个使用钛合金的例子:

代码语言:javascript
复制
 collection.fetch({ 
     data: {
             where : JSON.stringify({
                page: 1
             })
           } 
      });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6659283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档