我尝试覆盖模型中的sync方法,使其显示如下,以便它可以执行POST,但它似乎无法正常工作(仍在进行GET调用)。
sync: function(method, model, options) {
if (method === "read") {
method = "create";
}
return Backbone.sync.call(this, method, model, options);
}
fetch看起来像这样:
var model = new MyModel();
var deferred = model.fetch({
dataType: "jsonp",
data: {
parm1: "somevalue",
parm2: false,
parm3: {
type1: "abc",
type2: "123"
}
}
});
关于为什么这不起作用的任何想法?
非常感谢!!
答案 0 :(得分:2)
您可以将type
作为fetch
方法options
参数的一部分传递。
会发生什么情况,Backbone将sync
您的请求read
作为ajax
方法,就在调用jQuery的type
方法之前,它将覆盖var xhr = options.xhr = Backbone.ajax(_.extend(params, options));
,就像您一样可以在Backbone的源代码中看到。
var model = new MyModel();
var deferred = model.fetch({
type: "post",
dataType: "jsonp",
data: {
parm1: "somevalue",
parm2: false,
parm3: {
type1: "abc",
type2: "123"
}
}
});
所以你的代码看起来应该是这样的:
options
请记住,传递给fetch
方法的ajax
基本上是jQuery的{{1}}选项,扩展了Backbone的选项。
答案 1 :(得分:0)
您需要在传递给type
的选项中将Backbone.sync
设置为“发布”。正如sync
docs中提到的,options
是“成功和错误回调,以及所有其他jQuery请求选项”:
sync: function(method, model, options) {
var opts = options;
if (method === "read") {
method = "create";
opts = $.extend({}, opts, {
type: "post"
});
}
return Backbone.sync.call(this, method, model, opts);
}