gpt4 book ai didi

javascript - Backbone 尝试使用 put 而不是 post

转载 作者:行者123 更新时间:2023-11-28 19:20:09 25 4
gpt4 key购买 nike

出于某种奇怪的原因,Backbone 试图放置我的模型对象,而不是将其发布到服务器。

该错误是 HTTP 500 错误,因为 Backbone 正在尝试放置一个没有 id 的模型(因为我已将其设置为未定义):

 PUT /api/teams/undefined 500 285ms - 135b

这是我的代码:

this.model.id = undefined;
this.model._id = undefined;
teamCollection.add(this.model);
this.model.save(null,
{
success: function (model) {

$('.top-right').notify({
message: {text: ' New team added! '},
type: 'info',
fadeOut: {
delay: 3500
}
}).show();
window.userHomeMainTableView.render();
}
,
error: function (model) {
teamCollection.remove(model);
$('.top-right').notify({
message: {text: ' Error adding team :( '},
type: 'danger',
fadeOut: {
delay: 3500
}
}).show();
}
});

即使在“强制” model.id 和 model._id 未定义之后,Backbone 仍然尝试执行 HTTP PUT。怎么会这样?

最佳答案

同步过程内部使用Model#isNew来决定是否应该 PUT 或 POST。 isNew 头脑很简单:

isNew model.isNew()

[...] If the model does not yet have an id, it is considered to be new.

还有那个check is done using :

!this.has(this.idAttribute)

has method只是一个简单的 attr 包装器:

has: function(attr) {
return this.get(attr) != null;
}

所以这些是无关紧要的:

this.model.id = undefined;
this.model._id = undefined;

当 Backbone 决定 PUT 或 POST 时,这些并不会真正删除 id 属性,而是会破坏您的模型。

我认为您最好复制模型(不带 id)并保存副本:

var data = m.toJSON();
delete data.id;
var copy = new Model(data);

或者更好的是,创建一个全新的模型,用数据填充它,然后保存新的模型实例。

我认为你需要unset id 属性并手动删除 id 属性以使您尝试执行的操作有效。

关于javascript - Backbone 尝试使用 put 而不是 post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29045343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com