我正在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
事件,然后由控制器捕获该事件并与此页面中不需要的其他交互进行案件。所以我需要暂时禁止触发此事件。我怎么能做到这一点?
答案 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);
}