Javascript 在清除模型并重置为默认值时防止模型集“更改”事件?

Javascript 在清除模型并重置为默认值时防止模型集“更改”事件?,javascript,backbone.js,Javascript,Backbone.js,我在提交联系人表单时设置一个模型,所以我获取所有输入值,创建一个对象文本,然后在模型上设置它。我有一个change事件侦听器,然后输出一个摘要屏幕。我还有一个重置按钮,用于清除模型并将模型重置为默认值。我的问题是,此重置还会触发更改事件,然后显示摘要屏幕,这是我不希望看到的。有可能防止这种情况吗 我的主干视图示例 initialize: function() { console.log('ContactForm::initialize'); this.liste

我在提交联系人表单时设置一个模型,所以我获取所有输入值,创建一个对象文本,然后在模型上设置它。我有一个
change
事件侦听器,然后输出一个摘要屏幕。我还有一个重置按钮,用于清除模型并将模型重置为默认值。我的问题是,此重置还会触发更改事件,然后显示摘要屏幕,这是我不希望看到的。有可能防止这种情况吗

我的主干视图示例

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());
    }
初始化:函数(){
log('ContactForm::initialize');
this.listenTo(this.model'invalid',this.onModelInvalid);
this.listenTo(this.model,'change',this.onModelSet);
},
onFormSubmit:函数(事件){
event.preventDefault();
var input=this.el.querySelectorAll('.js input');
这个.setModelData(输入);
},
setModelData:函数(元素){
var属性={};
for(var i=0,len=elements.length;i0){
this.toggleValidationClass('remove');
}
log(this.model.toJSON());
}

使用模型上的属性来判断它是新加载的还是正在重置的。在
onFormReset
中将其设置为
true
,并在
onModelSet
中对其进行测试使用模型上的属性来判断它是新加载的还是正在重置的。在
onFormReset
中将其设置为
true
,并在
onModelSet
中对其进行测试有一个名为
silent的(未记录者)选项

(出于某种原因,尽管《美国参考》的文档中提到了这一点)

github上的相关来源:

所以试试看

this.model.clear({silent:true}).set(this.model.defaults, {silent:true});
使用以下代码

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()
没有生成任何更改事件。

有一个名为
silent
的(未记录的by)选项

(出于某种原因,尽管《美国参考》的文档中提到了这一点)

github上的相关来源:

所以试试看

this.model.clear({silent:true}).set(this.model.defaults, {silent:true});
使用以下代码

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()
没有生成任何更改事件。

是的,我认为这不是
{silent:true}
适用于meCan,我可以将一个选项传递到model.clear().set?比如:
this.model.clear().set(this.model.defaults,{reset:true})
将其发送到
清除
,或者只使用
设置
。为什么两者都需要呢?是的,我想如果我认为
{silent:true}
对meCan不起作用,我可以将一个选项传递给model.clear().set吗?比如:
this.model.clear().set(this.model.defaults,{reset:true})
将其发送到
清除
,或者只使用
设置
。为什么两者都需要?
{silent:true}
似乎仍然会触发event@styler它正在工作(只生成了两个事件,它们来自未设置
silent
的地方)@styler如果你能使它的plnkr(或jsfiddle)不工作,我可能也可以看一看。代码中可能有其他地方触发的事件。
{silent:true}
似乎仍会触发event@styler它正在工作(只生成了两个事件,它们来自未设置
silent
的地方)@styler如果你能使它的plnkr(或jsfiddle)不工作,我可能也可以看一看。代码中可能有其他地方触发的事件。