在javascript函数参数中编码特殊字符

时间:2011-09-02 00:34:05

标签: javascript extjs extjs3

我定义了一个这样的ext js列模型:

new Ext.grid.ColumnModel({
  defaults: {
    sortable: true
  },
  columns: [
    {id:'msgId',hidden: true, dataIndex: 'msgId'},                  
    {header: 'info',xtype: 'templatecolumn',tpl: '<a href="#"  onClick = "viewMessage({msgDetails})">View Message Details</a>'} 
  ]
}),
...
..

函数调用onClick = "viewMessage({msgDetails})"失败,因为msgDetails有双引号和特殊字符,我相信它需要某种编码才能作为函数参数传递。 这可以做什么?

编辑:这是msgDetails的来源:

var records = Ext.data.Record.create([{name: 'msgId', type:'string', mapping: 'msgId'},
{name: 'msgDetails',type:'string',  mapping: 'msgDetails'}]);

3 个答案:

答案 0 :(得分:1)

我认为单引号和双引号没有任何问题。您不需要对它们进行编码以将它们用作函数参数。

我认为问题是以下位不是有效的JavaScript:

viewMessage({msgDetails})

如果你有一个使用{}的对象文字,你必须提供一个或多个键值对。我不确定你在那里做什么,但大概你的意思是:

viewMessage(msgDetails)
// or
viewMessage({msgDetails : 'some details'})

如果您展示了msgDetails的定义位置和方式,我可以提供更具体的建议。

答案 1 :(得分:1)

您应该为特殊字符使用HTML定义的字符集。例如

&amp;   ampersand &
&lt;    less than sign <
&gt;    greater than sign >
&quot;  the double quote sign "
&#39;   single quote '

答案 2 :(得分:0)

当msgDetails字段是一个字符串时,你应该至少引用它:

tpl: '<a href="#"  onClick="viewMessage(\'{msgDetails}\')">View Message Details</a>'

但是,不应该编写脆弱的内联JavaScript,而只需将侦听器绑定到cellclick事件:

var infoColumnIndex = 1;
grid.on("cellclick", function(grid, rowIndex, colIndex) {
    if (colIndex === infoColumnIndex) {
        viewMessage(grid.getStore().getAt(rowIndex).get("msgDetails"));
    }
});

或者查看ActionColumn