2012-10-25 23 views
2

我有一個帶有動態字段的表單。在表單的afterrender事件中,我想設置afterLabelTextTpl屬性。我可以設置這個屬性,但我無法看到它在我的表單中發生變化。我怎樣才能做到這一點?在表單呈現後設置AfterLabelTextTpl

段:

listeners: { 
    beforerender: function() { 
     var fields = me.getForm().getFields(); 
     Ext.each(fields.items, function (f, idx) { 
      f.afterLabelTextTpl = requiredTpl; 

      console.log(f.afterLabelTextTpl); 
     }); //eo Ext.each 
    } 
} 

編輯:
我一直在尋找beforerender方法

+0

沒有ü嘗試form.doLayout()? – sunny

+0

@sunny是的。沒有結果在屏幕上。順便說一句,因爲Ext4 doLayout()不再需要。 – A1rPun

回答

1

後的組件已經變得無法使用該屬性。 僅當組件尚未呈現時,才運行initRenderTpl(使用標籤模板)方法。一旦渲染它將不會再次運行。

您將需要直接更新DOM。

+0

好吧,有道理。 '... getForm()。getFields()'在此之前不可用,所以我需要另一種方法來獲取所有字段。你知道一個方法嗎? – A1rPun

+2

不是。你確定getFields在beforerender事件中不可用嗎? – dbrin

+0

這是..做。謝謝你的工作:) – A1rPun

3

嘗試

f.labelEl.dom.innerHTML = "LABEL:<span style='color:red;font-weight:bold' data-qtip='Required'>*</span>"; 
+0

謝謝,但這是6個月前解決;) – A1rPun

+0

哇,這很有趣,因爲我今天需要這個片段:) – A1rPun

0

我會建議這樣的事情在你的表格:

setRequired: function(field, index) { 
    field.afterLabelTextTpl = requiredTpl; 
}, 

initComponent: function(arguments) { 
    var me = this; 

    this.on('beforeadd', function(me, field){ 
     var fields; 

     if (field.isXType('fieldset')) { 
      fields = field.query('field'); 
      Ext.each(fields, me.setRequired); 
     } else { 
      me.setRequired(field); 
     } 
    }); 


    // rest of logic 
    me.callParent(arguments); 
},