Кодировать специальные символы в аргументе функции javascript - PullRequest
2 голосов
/ 02 сентября 2011

Я определил модель столбца 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 ]

1 голос
/ 02 сентября 2011

Вы должны использовать определенные HTML-наборы символов для специальных символов. Например

&amp;   ampersand &
&lt;    less than sign <
&gt;    greater than sign >
&quot;  the double quote sign "
&#39;   single quote '
1 голос
/ 02 сентября 2011

Я не вижу ничего плохого в одинарных и двойных кавычках. Вам не нужно кодировать их, чтобы использовать их в качестве аргументов функции.

Я думаю, проблема в том, что следующий бит не является допустимым JavaScript:

viewMessage({msgDetails})

Если у вас есть литерал объекта, использующий {}, вы должны указать одну или несколько пар ключ-значение. Я не уверен, что вы пытаетесь сделать там, но, вероятно, вы действительно имеете в виду:

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

Если вы покажете, где и как вы определите msgDetails Я мог бы предложить более конкретный совет.

0 голосов
/ 02 сентября 2011

Если поле 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 .

...