2011-09-02 67 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 '