遵循documentation,我做到了:
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呢?
发布于 2011-07-12 12:26:57
更改:
collection.fetch({ data: { page: 1} });
至:
collection.fetch({ data: $.param({ page: 1}) });
因此,不用过多地做这件事,这将在{data: {page:1}}
对象中作为options
调用
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
附加到该地址。
发布于 2011-08-23 03:06:19
您还可以将processData设置为true:
collection.fetch({
data: { page: 1 },
processData: true
});
Jquery会自动将数据对象处理成参数字符串,
但在Backbone.sync功能中,Backbone会关闭processData,因为Backbone会使用其他方法来处理POST、UPDATE…
在Backbone源代码中:
if (params.type !== 'GET' && !Backbone.emulateJSON) {
params.processData = false;
}
发布于 2013-07-23 20:55:48
另一个使用钛合金的例子:
collection.fetch({
data: {
where : JSON.stringify({
page: 1
})
}
});
https://stackoverflow.com/questions/6659283
复制相似问题