我有一个名为Delivery的Backbone模型。然后,我创建一个名为DeliveryList的Deliveries集合,由LocalStorage支持。在我的Marionette.ItemView中显示集合中的项目,我有一个删除项目的方法:
removeDeliveryOption: function() {
Deliveries.remove(this.model.get("id"));
}
出于某种原因,当我点击删除按钮时,这会从Marionette.CompositeView中删除该项目,但是当我重新加载页面时,相同数量的项目总会重新出现。
值得注意的是,当我删除该项时,它总是会重新出现,默认选项为“Free Delivery”。我在模型中使用默认值和模式,因为我使用的是Backbone-forms插件(https://github.com/powmedia/backbone-forms)。
非常感谢任何帮助!
var Delivery = Backbone.Model.extend({
defaults: function () {
return {
order: Deliveries.nextOrder(),
optionName: "Free Delivery",
shipToState: "Hawaii",
zipCodes: "96813",
perOrderFee: "0.00",
perItemFee: "0.00"
};
},
schema: {
optionName: { type: 'Text', validators: ['required'] },
shipToState: { type: 'Select', options: getStateNames(), validators: ['required'] },
zipCodes: { type: 'Text', validators: ['required'] },
perOrderFee: { type: 'Text', validators: ['required'] },
perItemFee: { type: 'Text', validators: ['required'] },
}
});
var DeliveryList = Backbone.Collection.extend({
model: Delivery,
localStorage: new Backbone.LocalStorage("deliverylist-backbone"),
nextOrder: function () {
if (!this.length) return 1;
return this.last().get('order') + 1;
},
comparator: 'order'
});
var Deliveries = new DeliveryList;
var deliveryView = Marionette.ItemView.extend({
//tagName: "li",
template: "#delivery-item-template",
events: {
"click #removeThis": "removeDeliveryOption",
},
removeDeliveryOption: function() {
Deliveries.remove(this.model.get("id"));
}
});
var DeliveriesView = Marionette.CompositeView.extend({
initialize: function() {
Deliveries.fetch();
},
template: '#deliveries-view-template',
itemView: deliveryView,
events: {
"click #addShipping": "addDeliveryOption",
},
addDeliveryOption: function() {
var editDeliveryForm = new Backbone.Form({
template: _.template($("#editDeliveryTemplate").html()),
model: Deliveries.create()
}).render();
this.$el.append(editDeliveryForm.el);
$("#triggerEditDelivery").fancybox({
'afterClose': function () {
commitForm(editDeliveryForm);
//Wait do display the inlineModel until here
// Once we've bound the form to the model, put the saving logic with the collection
//Deliveries.last().save();
}
}).trigger('click');
},
// Specify a jQuery selector to put the itemView instances in to
itemViewContainer: "#deliveries",
});
EDIT 感谢@ejosafat!不得不销毁模型,而不是仅仅从集合中删除。
removeDeliveryOption: function() {
this.model.destroy();
}
答案 0 :(得分:3)
remove方法仅影响浏览器中加载的集合,而不影响永久存储(本地或服务器)。这就是它从视图中消失的原因,但是当你重新加载页面时它再次出现。
如果你想在存储中摆脱那个模型,也可以使用它的destroy方法。
(顺便说一句,在Javascript中使用初始大写字母仅用于构造函数的常见约定,因为它应该与new运算符一起使用,或者扩展为创建派生的构造函数/类,所以这是一个坏主意使用Deliveries作为集合var名称)