我尝试使用Backbone.sync
发送请求:
...
async createModel(model) {
await Backbone.sync('create'/*or 'update' or 'delete'*/, model);
console.log(model.toJSON());
model.fetch(); // i don't want to do this
}
...
在.sync('...')
服务器响应某些数据后,但该数据与model.toJSON()
不同,因此我需要额外的.fetch()
方法来正确更新我的模型。
为什么会这样?如何在.sync()
之后立即更新我的模型,而无需额外.fetch()
? {wait: true}
选项无效。
答案 0 :(得分:0)
基于评论看起来你已经解决了这个问题。但是,我并不完全相信您会从该解决方案中获得您希望的确切行为。
如果您只想使用同步我认为您可以通过其他几种方式解决您的问题。根据{{3}}使用jquery.ajax并返回一个jqXHR对象,而不是来自调用的实际响应数据。更不用说响应数据仍然不会被格式化为Backbone.Model。但是,您可以像使用ajax请求一样使用.done和.fail,并在那里执行model.set()
。
...
async createModel(model) {
await Backbone.sync('create'/*or 'update' or 'delete'*/, model)
.done(function(data) {
var newModel = new Model(data);
[MODEL LOCATION].set(newModel);
})
.fail(function(data) {
console.log('Error: ' + data.status);
});
}
...
然而,你可以完成同样的事情的另一种方式是看起来Backbone documentation, Backbone.sync采用第三个参数[选项]并再次基于Backbone.sync function看起来像它需要的选项是成功和错误回调。因此,如果您使用该模式,它将如下所示:
...
async createModel(model) {
await Backbone.sync(
'create', //or 'update' or 'delete'
model,
{
success: function(data) {
var newModel = new Model(data);
[MODEL LOCATION].set(newModel);
},
error: function(data) {
console.log('Error: ' + data.status);
}
}
);
}
...
在所有情况下,data参数都是从REST调用返回的响应数据。
无论如何,希望这有助于将来。