在我的应用中,我想从一个集合中删除一个模型并调用" this.model.destroy"在我看来。但是,当触发函数时,我得到405响应,并且响应的url不包含模型的id。根据我从文档中理解的内容,Backbone基于" Collection url + model id"创建了url。我通过将url传递给destroy方法来修复问题,但是知道这不是最好的方法。 不知何故,我觉得这应该没有我的" hack"。 发送DELETE请求时,后端需要Id。 如何使用Backbone的最佳实践来实现这一目标?
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'
});
答案 0 :(得分:3)
实际上将urlRoot设置为函数就是我如何解决它。
urlRoot: function () {
return "/checkout/item";
}
显然,这允许Collection构建url。
答案 1 :(得分:1)
你的My.Model.cartItem'不应该用字符串覆盖url
属性(或根本覆盖它)。默认情况下(见here),模型的网址是一个函数,它将其id属性与集合的url base(已经定义)的结尾相结合。
如果您想指定要与模型ID结合使用的自定义网址路径,您仍然可以使用" urlRoot
"而不是" url
"。您应该没问题,只需删除&{39; url
'在这里。