在ExtJS组合框中使用模板时出现Javascript错误(仅限IE)

时间:2013-12-19 12:16:51

标签: javascript internet-explorer extjs extjs4.1

我正在使用ExtJs 4.1.1&我的应用程序有一个组合框。我已将TPL添加到组合框中。当数据具有单引号(撇号)等特殊字符时,一切正常。如果我删除TPL应用程序不会抛出任何JS错误。该错误仅在IE中发生。我使用的是IE 10.

即使数据具有特殊字符,我如何确保没有java脚本错误。

这是fiddle

1 个答案:

答案 0 :(得分:2)

在您的模板中,您正在使用onclick属性中的javascript代码中的记录数据:

onClick="Ext.PA.getController(\'MyController\').ShowSharedQueryWindow(\'{Name}\');"

当记录包含单引号时,模板将在该javascript代码中产生语法错误:

Ext.PA.getController('MyController').ShowSharedQueryWindow('query's');

您需要转义记录的属性以防止:

onClick="Ext.PA.getController(\'MyController\').ShowSharedQueryWindow(\'{Name:htmlEncode:htmlEncode}\');"

:htmlEncode是一种速记,可以在XTemplates中用来调用Ext.util.Format的函数。

编辑:您需要对其进行双重编码,一次用于模板,再次用于生成的JavaScript代码(请参阅上面的更新代码)。


Fwiw,使用XTemplate生成的HTML中的onclick监听器对我来说似乎不是最好的方法。一般来说,当我使用ExtJS时,我想避免通过HTML添加监听器。

您可以在组合框的绑定列表上使用itemclick侦听器,而不是在单击链接时调用相应的函数:

combo.getPicker().on({
    'itemclick': function(view, record, node, index, e) {
        if (e.getTarget().tagName == 'a') {
            Ext.PA.getController('MyController').ShowSharedQueryWindow(record.get('Name'));
        }
    }
});

这样,你也可以避免逃避问题。