2015-07-06 63 views
1

我在ViewController中写入函数,该函数将重置复杂的所有字段View。此视图使用ExtJS 5双向数据绑定与ViewModel。这就是我怎样,我正在重置的字段:ExtJS - 在不触发“更改”事件的情况下更改字段值

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

如果您直接设置字段值(即不通过视图模型),也许可以使用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); 
} 
+1

由于suspendCheckChange是私有的,暂停字段'change'事件会更好。 –

+0

它的工作原理! @EvanTrimboli我如何暂停活动? –

相关问题