2012-07-19 75 views
3

我有一個java web應用程序。我有一個實體類(經過改造之後)我想用ExtJs的組合框。我的問題如下:ExtJs Combobox displayField編碼

在displayField中可能存在具有html代碼的條目。因爲在使用flexjson.JSONSerializer進行序列化期間,我使用flexjson.HTMLEncoder使條目在下拉列表中可見(在因未終止的字符串文字而使屏幕死亡之前)。到現在爲止還挺好。

editor.myCombo = new Ext.form.ComboBox({ 
    mode: 'local', 
    editable: false, 
    forceSelection: true,   
    triggerAction: 'all', 
    store: new Ext.data.JsonStore({ 
     fields: ['myId', 'myName'], 
     emptyItem: {'myName' : '...'}, 
     data: <c:out value="${form.json['myList']}" escapeXml="false"/>   
    }), 
    disabled: isEditorDisabled, 
    width: 75, 
    listWidth: 160, 
    displayField: 'myName', 
    valueField: 'myId' 
}); 

但是,當我從下拉列表中(全部正常顯示像Alfred </script>)顯示字段將顯示它作爲選擇項目:Alfred &lt;/script&gt;

我該如何做這項工作?爲什麼它顯示的編碼版本(在json請求中檢索到)而不是HTML?

回答

2

嘗試在您的配置中包含覆蓋的getDisplayValue方法。設置好它返回解碼值,就像這樣:

editor.myCombo = new Ext.form.ComboBox({ 
    mode: 'local', 
    editable: false, 
    forceSelection: true,   
    triggerAction: 'all', 
    store: new Ext.data.JsonStore({ 
     fields: ['myId', 'myName'], 
     emptyItem: {'myName' : '...'}, 
     data: <c:out value="${form.json['myList']}" escapeXml="false"/>   
    }), 
    disabled: isEditorDisabled, 
    width: 75, 
    listWidth: 160, 
    displayField: 'myName', 
    valueField: 'myId', 

    // this should return the decoded string instead 
    getDisplayValue: function() { 
     return Ext.String.htmlDecode(this.value); 
    } 
}); 

它有許多工作要做這種方式是因爲Ext.form.field.Combo的實際場部分確實是一個HTML input元素,並且將只顯示的原因直接的文本,它不會從它生成HTML。

+1

建議的解決方案在版本4.x中不起作用(在舊版本中沒有測試過) - 組合總是顯示來自valueField的解碼值,而不是顯示字段的解碼值。 爲了使它工作,替換方法正文: 'return Ext.String.htmlDecode(this.displayTpl.apply(this.displayTplData));' – 2013-12-17 15:02:54