gpt4 book ai didi

javascript - 清除模型并重置为默认值时防止模型设置 `change` 事件?

转载 作者:行者123 更新时间:2023-11-30 08:34:09 25 4
gpt4 key购买 nike

我在提交联系表单时设置模型,因此我获取所有输入值,创建对象文字,然后在模型上设置它。我有一个 change 事件监听器,然后输出一个摘要屏幕。我还有一个重置按钮,可以清除模型并将模型重置为默认值。我的问题是此重置还会触发更改事件,然后显示我不想要的摘要屏幕。有没有可能避免这种情况?

我的主干 View 示例

initialize: function() {
console.log('ContactForm::initialize');

this.listenTo(this.model, 'invalid', this.onModelInvalid);
this.listenTo(this.model, 'change', this.onModelSet);
},
onFormSubmit: function(event) {

event.preventDefault();

var inputs = this.el.querySelectorAll('.js-input');

this.setModelData(inputs);
},

setModelData: function(elements) {

var attributes = {};

for (var i = 0, len = elements.length; i < len; i++) {

var thisInput = elements[i],
thisInputValue = thisInput.value;

attributes[thisInput.id] = thisInputValue;
}

this.model.set(attributes, { validate: true });
},

/*
* this.model returned, this model will contain an array of validation errors accessed via this.model.validationError
* loop through these and output each error field.
*/
onModelInvalid: function() {
console.log('ContactForm::onModelInvalid', this.model.validationError);

this.toggleValidationClass('add');
},

onModelSet: function() {
console.log('ContactForm::onModelSet', this.model.toJSON());

Backbone.Events.trigger('show:summary', this.model);
},

onFormReset: function(event) {

event.preventDefault();

// Reset the model to default
this.model.clear().set(this.model.defaults);

// Reset form fields
this.$('.js-form')[0].reset();

// Remove all invalid classes if errors exist
if(this.model.validationError && this.model.validationError.length > 0) {
this.toggleValidationClass('remove');
}

console.log(this.model.toJSON());
}

最佳答案

有一个(.set 未记录的)选项称为 silent

(出于某种原因,.clear 的文档中提到了它)。

github上相关来源:https://github.com/jashkenas/backbone/blob/master/backbone.js#L482

那么试试

this.model.clear({silent:true}).set(this.model.defaults, {silent:true});

Demonstration on plnkr使用以下代码

var model = new Backbone.Model();

model.on('change', function(e) {
document.write(JSON.stringify(e.changed));
});

model.set('foo', 'bar');
model.clear({silent: true}).set('foo', 'bar', {silent: true});
model.set('test', '123');

运行此代码会将 {"foo":"bar"}{"test":"123"} 写入文档,因此 {silent:true} 被传递给 .clear() 并且 .set() 没有生成任何更改事件。

关于javascript - 清除模型并重置为默认值时防止模型设置 `change` 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33626367/

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