繁体   English   中英

如何防止Backbones保存方法尝试更新每个模型?

[英]How can I prevent Backbones save method from trying to update every model?

我正在创建具有骨干的原始Web应用程序。 我正在编写更新资源(PUT)的功能。 我正在尝试通过从服务器获取模型属性(请参见SubscriberView)并成功获取资源以实例化SubscriberEditView的方式来实现这一点,从而通过新获取的模型。 到目前为止,这可以按预期进行; SubscriberEditView呈现一个HTML表单,其中填充了模型实例属性。 当我在表单中输入新的登录值时,我可以触发更新功能,该功能成功向服务器资源发出PUT请求并按预期更新模型实例。 但是,问题在于,当我随后对另一个模型实例重复此过程时,将针对当前模型和先前实例化的模型发出PUT请求。 原因是因为我现在有两个SubscriberEditView实例? 还是我错过/误解的其他东西。

请参见下面描述的代码。

 // The view for a single subscriber var SubscriberView = Backbone.View.extend({ tagName: 'tr', template: _.template($('#subscribers-tmpl').html()), initialize: function() { this.listenTo(this.model, 'destroy', this.remove); }, render: function() { var html = this.template(this.model.toJSON()); this.$el.html(html); return this; }, events: { 'click .remove': 'onRemove', 'click .edit-subscriber': 'editSubscriber', }, editSubscriber: function() { var getSubscriberModel = this.model.set('id', this.model.attributes.id, {silent:true}) getSubscriberModel.fetch({ success: function (model, response) { $('#addSubscriber').fadeOut(); new SubscriberEditView({model:model}); }, error: function (response) { console.log('There was an error'); } }); }, onRemove: function() { this.model.destroy(); } }); // The edit view var SubscriberEditView = Backbone.View.extend({ tagName: 'div', el: '#updateSubscriber', template: _.template($('#subscriberEdit-tmpl').html()), initialize: function() { this.model.on('sync', this.render, this); }, events: { 'click #close': 'cancel', 'click .save-subscriber': 'update' }, update: function() { var $login = this.$('#login'); this.model.save({ login: $login.val(), }, { dataType: 'text', success: function (model, response, options) { console.log('success'); }, error: function (model, response, options) { console.log('error'); } }); }, cancel: function() { $('#addSubscriber').fadeIn(); $('#editInner').fadeOut(); }, render: function() { var html = this.template(this.model.toJSON()); this.$el.html(html); }, }); 

如果有人可以提供帮助,将不胜感激。 干杯

问题是el: '#updateSubscriber', 您所有的视图实例都指向事件委托到的相同元素。 因此,单击任何.save-subscriber都会触发所有视图实例的更新。 您不应该为要具有多个实例的视图指定el

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM