2011-09-02 51 views
2

我定义的Ext JS的列模型这样的特殊字符:编码中的JavaScript函数参数

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'}]); 

回答

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

1

我看不出有什么毛病单引号和双引号那里。你不需要编码它们来使用它们作为函数参数。

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

viewMessage({msgDetails}) 

如果你有一个对象字面使用{},你必须提供一个或多个键 - 值对。我不知道你想在那里做什么,但想必你真正的意思是:

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

如果您在何处以及如何定义msgDetails我可以提供更具体的建议。

+0

谢谢先生。我将msgDetails的定义添加到问题 – Victor

+0

嗨...你能帮我吗?如果我可以让问题更清楚,请让我知道 – Victor

+0

对不起,我不熟悉ExtJS,所以考虑到你实际上并没有变量'msgDetails',我想我想给你的任何进一步的建议可能会导致你在错误的方向。它可能是'viewMessage(records ['msgDetails'])'',但这是一个猜测(我不知道Ext.data.Record.create是做什么的),我认为你需要一些索引值来查找正确的记录。 – nnnnnn

1

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

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