ExtJs组合框显示字段编码

3
我有一个Java网络应用程序。我有一个实体类,当然需要转换,我希望可以在ExtJs的下拉列表中使用它。我的问题如下:
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?
1个回答

4

尝试在您的配置中包含一个被覆盖的 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 输入元素,只会显示纯文本,而不会从中生成 HTML。


1
建议的解决方案在4.x版本中不起作用(未在旧版本中进行测试)-组合框始终显示来自valueField的解码值而非displayField的解码值。 为使其正常工作,请使用以下方法体替换: return Ext.String.htmlDecode(this.displayTpl.apply(this.displayTplData)); - Michal Levý

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接