ExtJS - 更改字段值而不触发“更改”事件

时间:2015-07-06 10:13:38

标签: extjs

我正在ViewController中编写一个函数,它将重置复杂View中的所有字段。此视图使用ExtJS 5双向数据绑定ViewModel。这就是我重置字段的方式:

clearFields: function() {
    var vm = this.getViewModel();

    vm.set('name', '');
    vm.set('address', '');
    vm.set('port', '');
    vm.set('active', false);
    vm.set('dynamic', false);
    vm.set('bandwidthOptimization', true);
    vm.set('reverse', false);
    vm.set('timeout', 60);
    vm.set('camerasEnabled', 1);
    vm.set('username', '');
    vm.set('password', '');
    vm.set('vendorGuid', '');
    vm.set('modelGuid', '');
    vm.set('subscriber', '');
    vm.set('event', '');
    vm.set('partition', '');
    vm.set('instructions', '');
}

但是每次我使用set方法时,它会触发其字段的change事件,然后由控制器捕获该事件并与此页面中不需要的其他交互进行案件。所以我需要暂时禁止触发此事件。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

如果您直接在字段上设置值(即不通过视图模型),也许您可​​以使用setRawValue。但如果您需要按照引用的方式继续这样做,那么这是一个解决方案:

为了防止字段触发change事件,其私有suspendCheckChange属性需要大于0.因此,您可以实现一种方法来遍历字段并增加属性进行重置,然后,一旦完成重置,将属性值恢复到原来的位置。例如:

suspendChange: function(suspend) {
    var fields = Ext.ComponentQuery.query('field', this.getView()),
        i = 0;
    for (; i < fields.length; i++) {
        if (suspend) {
            fields[i].suspendCheckChange++:
        } else {
            fields[i].suspendCheckChange--;
        }
    }
},
clearFields: function() {
    this.suspendChange(true);
    // do reset stuff
    this.suspendChange(false);
}