Javascript 主干模型销毁url不传递模型id
在我的应用程序中,我想从收藏中删除一个模型,并在我的视图中调用this.model.destroy。但是,当触发函数时,我得到一个405响应,响应的url不包含模型的id。根据我从文档中了解的情况,Backbone基于集合url+模型id创建url。我通过将url传递给destroy方法解决了这个问题,但我知道这不是最好的方法。 不知何故,我觉得这应该没有我的黑客工作。 发送删除请求时,后端需要Id。 如何使用主干网的最佳实践来实现这一点Javascript 主干模型销毁url不传递模型id,javascript,backbone.js,Javascript,Backbone.js,在我的应用程序中,我想从收藏中删除一个模型,并在我的视图中调用this.model.destroy。但是,当触发函数时,我得到一个405响应,响应的url不包含模型的id。根据我从文档中了解的情况,Backbone基于集合url+模型id创建url。我通过将url传递给destroy方法解决了这个问题,但我知道这不是最好的方法。 不知何故,我觉得这应该没有我的黑客工作。 发送删除请求时,后端需要Id。 如何使用主干网的最佳实践来实现这一点 My.Model._entity = B
My.Model._entity = Backbone.Model.extend({
initialize: function(options) {
if (options.created && typeof options.created === 'string') {
this.set('created', new Date(options.created));
}
if (options.modified && typeof options.modified === 'string') {
this.set('modified', new Date(options.modified));
}
},
defaults: function() {
return {
created: new Date(),
modified: new Date()
};
}
});
My.Model.cartItem = My.Model._entity.extend({
defaults: function () {
var _def = My.Model.cartItem.__super__.defaults.apply(this, arguments);
return _.defaults(_def, {
description: "",
title: "",
image: "",
price: 0,
quantity: 0,
itemId: ''
});
},
url: '/checkout/item'
});
My.Collection.CartItem = Backbone.Collection.extend({
model: My.Model.cartItem,
url: '/checkout/item'
});
“My.Model.cartItem”不应使用字符串覆盖url属性,也不应完全覆盖它。默认情况下,模型的url是一个函数,它将其id属性与已定义的集合url基的末尾相结合
如果您想指定一个自定义url路径与您的模型Id相结合,您仍然可以使用urlRoot而不是url。不过,在这里删除“url”应该没问题。实际上,我是通过将urlRoot设置为函数来解决这个问题的
urlRoot: function () {
return "/checkout/item";
}
显然,这允许集合构造url。itemId是您的id属性吗?如果是,请将idAttribute:“itemId”添加到模型定义中:这将覆盖集合url,并在我要发布时触发错误。您对模型做了什么更改,它产生了什么错误?我将模型中的url更改为“urlRoot:function{return/checkout/item;}您不需要在模型上定义urlRoot或url属性,因为它将从集合中提取“url”属性。如果查看源代码,您将了解为什么urlRoot可以正常工作,但如果模型位于集合中,则urlRoot是不必要的: