我正在使用ExtJs 4.1.1&我的应用程序有一个组合框。我已将TPL添加到组合框中。当数据具有单引号(撇号)等特殊字符时,一切正常。如果我删除TPL应用程序不会抛出任何JS错误。该错误仅在IE中发生。我使用的是IE 10.
即使数据具有特殊字符,我如何确保没有java脚本错误。
这是fiddle
答案 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'));
}
}
});
这样,你也可以避免逃避问题。