向model.save()传递额外请求参数为何以URL查询参数形式发送
问题解决说明
核心原因
你传入的params配置项默认就是被类Backbone风格的模型框架用于拼接URL查询参数的,不会默认进入POST请求的payload,属于该方法的默认设计逻辑。
可用实现方案
- 方案1:直接将自定义参数合并到模型属性中传递
save方法的第一个参数接收要更新的模型属性,所有传入该位置的属性都会自动进入POST payload,示例代码:mymodel.save({ test: 1 })
如果不想让test成为模型的常驻属性,请求完成后可以调用mymodel.unset('test')移除该属性即可。 - 方案2:手动指定请求的data配置项
save方法的第二个参数支持传入AJAX请求配置,你可以手动拼接完整的payload传入data字段覆盖默认逻辑,示例代码:mymodel.save({}, { // 合并模型原有属性和自定义参数 data: JSON.stringify(Object.assign(mymodel.toJSON(), { test: 1 })), contentType: 'application/json' }) - 方案3:全局修改逻辑(适合多场景复用)
重写对应模型的sync方法,统一将params中的参数合并到POST请求的payload中,不需要每次调用时手动处理:const MyModel = Backbone.Model.extend({ sync: function(method, model, options) { if (method === 'create' || method === 'update') { options.data = JSON.stringify(Object.assign(model.toJSON(), options.params || {})); options.contentType = 'application/json'; delete options.params; } return Backbone.sync.apply(this, arguments); } })
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

