2013-08-05 67 views
1

我需要“好风格”的建议。我有一个从json填充的表单。填充表单的代码放在render listener中。问题是,许多表单元素都有更改监听器,所以当填充表单时会触发这些更改监听器。我想要防止这种不需要的行为。ExtJs。在加载和更改监听器上设置表格值

// many form elements with change listeners come here 

listeners:{ 
render:function(){ 
    var frm=this.getForm(); 
    Ext.Ajax.request({ 
     url:'../handlers/instruct.handler.php?id='+id, 
     method:'POST', 
     params:{action:'params'}, 
     success:function(result,request){ 
      json=Ext.decode(result.responseText,1); 
      frm.setValues(json); // form population 
          // triggers change listeners 
     } 
    }); 
} 
} 

PS。我使用ExtJS的4.2

回答

2

你可以暂停上的字段事件:

var fields = form.getForm().getFields(); 
fields.each(function(f) { 
    f.suspendEvents(); 
}); 
form.setValues(json); 
fields.each(function(f) { 
    f.resumeEvents(); 
}); 
+0

谢谢!它工作正常,虽然这样的任务的两次迭代似乎并不理想。 – Jacobian

+0

无论你是在应用层实现它,还是在框架中完成它,你仍然需要遍历集合两次。 –

+0

另一种方法是在每个更改侦听器中使用全局标志变量(或对象)和许多“ifs”来检查change事件是否第一次出现。它看起来很丑陋,但是它不会更好吗? – Jacobian