2013-08-05 68 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