12

我正在使用 ExtJS 开发一个 Web 应用程序来构建 GUI 并通过 RESTful Web 服务与服务器通信(返回的数据被格式化为 JSON 对象)。
现在我在处理包含 HTML 标签、Javascript 代码的数据时遇到问题;因为当我将这些值设置为 Ext 表单、标签、输入字段时,它们会受到这些语法的影响。
我使用此函数将模型对象中的数据加载到表单中:

form.loadRecord(model);

我找到了转义 HTML 和 JS 的解决方案:使用

field.setValue(Ext.util.Format.htmlDecode(data)); 

但我认为这对于整个应用程序来说不是一个好的解决方案,因为开发人员必须做很多事情:查看所有输入字段、标签,并将该片段提供给他们。毕竟,这不是构建快速、健壮和可维护的应用程序的好方法。
那么,您能否帮我解决一下,以便它可以在一个地方进行修改,并影响到其他地方。我可以覆盖 AbstractComponent 的 setValue/setLabel 吗?或者我应该在渲染数据之前对数据进行编码?以及如何解码这些数据?(P/S:我在服务器端使用 Grails 框架)非常感谢。

4

3 回答 3

12

如果您使用 Ext.XTemplate,您可以在如下字段中转义 html:

var tpl = new Ext.XTemplate(
    '<p>My Field: {myField:htmlEncode}</p>'
);
于 2014-03-06T01:06:26.653 回答
7

一切都取决于您的用例,但我所做的是 - 在服务器端转义所有 HTML 代码,这样就不会出现“被遗忘”的地方。当这些数据需要加载到表单字段中时,这当然会产生问题,因为它们被转义了。最简单的解决方案是覆盖所有表单字段的 setValue 并使用 Extjs htmlDecode 函数,这将使这些值恢复正常。

Ext.override(Ext.form.field.Base, {
    setValue: function(val) {
        val = Ext.util.Format.htmlDecode(val);
        return this.callParent([val]);
    }
});
于 2013-12-10T20:01:54.180 回答
3

此链接有 jack.slocum 的出色回答: https ://www.sencha.com/forum/showthread.php?13913

grid.on('validateedit', function(e){
   e.value = Ext.util.Format.stripTags(e.value);
});

Util 方法 Ext.util.Format.stripTags() 删除所有 html/script 标签。

于 2016-02-23T09:41:57.073 回答