2012-05-09 28 views
2

我正在構建的jqGrid這是工作的罰款...電網建設如何從亞格訪問父電網的id在jqGrid的

if (jqent.isReq) { 
    sbGrid.Append("subGrid: true,"); 
    sbGrid.Append("subGridRowExpanded: function (subgrid_id, row_id) {"); 
    sbGrid.Append(" $('#' + subgrid_id).html(renderhtmlforSubgrid(subgrid_id, row_id));},"); 
} 

我有textarea的一個子網格,並且將呈現的圖像控制下面的代碼

function renderhtmlforSubgrid(subgrid_id, row_id) { 
    var script = '<div style="margin-left:10px; margin-top:10px; margin-bottom:10px;">'; 
    script += '<textarea class="txtCommentwatermarkOn" id="txtCommentSection" name="txtCommentSection" rows=2 cols=20>Type your comments here</textarea>'; 
    script += '<input onclick=\"RenderModalPopup(' + row_id + ',' + subgrid_id + ',this);\" type="image" id="image" src="../../Content/Images/commentIcon.png"/>'; 
    script += '</div>'; 

    return script; 
} 
上的圖像 「RenderModalPopup」 功能,點擊

將被觸發

function RenderModalPopup(rowid, tableid, event) { 
    var dataFromRow = $('#tblArtifact1').jqGrid('getRowData', rowid); 
    var PhaseArtifactId = $('#tblArtifact1').jqGrid('getCell', rowid, 'ID'); 
    .......................... 

每一件事情都很好......現在的問題是我硬編碼的網格ID爲「tblArtifact1」來獲取列值。需要刪除。我可以獲得網格ID嗎?有沒有預定義的參數/函數來獲取它?

我卡住了..請幫助。

+0

ü可以粘貼在ühttp://jsfiddle.net/ – Thulasiram

回答

3

回調函數subGridRowExpanded的內部,您可以使用this變量初始化爲網格的DOM(<table>的DOM)。所以你可以通過this.id得到母網格的id。如果你打電話renderhtmlforSubgridsubGridRowExpanded內我會建議你使用

renderhtmlforSubgrid.call(this, subgrid_id, row_id) 

代替

renderhtmlforSubgrid(subgrid_id, row_id) 

在這種情況下thisrenderhtmlforSubgrid函數內將不會改變全球window對象,你可以有this它爲你保存有用的信息(比如this.id id或$(this) jQuery說唱歌手到父網格)。

我建議您考慮在子網格中使用idPrefix選項來防止id重複(有關更多信息,請參閱the answer)。

此外,我從您的代碼中看到,您是C#/ C++開發人員更多的JavaScript開發人員。兩年前我有同樣的問題。 JavaScript有一些與衆所周知的其他語言接近的構造,但深層語義真的不同。所以JavaScript開發者有許多標準陷阱,他以錯誤的方式使用現有的構造。

例如:您不應該使用變量,屬性或特別是名稱以大寫字母開頭的函數。目前​​和PhaseArtifactId打破了規則。 JavaScript沒有類,但可以使用函數創建關閉結構。在函數內部,您可以將屬性分配給this。這些功能是「班級」的構造者,應該有第一個大寫字母。要創建「班級」實例,應使用new。例如var now = new Date();

閉包是JavaScript中函數的另一個例子,它看起來像函數,但有很多重要的不同之處。

此外,我建議您使用更多的匿名函數和函數表達式(var renderhtmlforSubgrid = function (subgrid_id, row_id) {...})而不是函數聲明(function renderhtmlforSubgrid (subgrid_id, row_id) {...})並在函數體的第一行中定義所有變量。JavaScript有沒有塊級變量聲明最喜歡的計算機語言,所以很容易產生錯誤的代碼,如果你定義的JavaScript代碼中的變量。

最後一個建議是使用的代碼Kernighan and Ritchie's style格式化JavaScript代碼獨立於您使用您最喜愛的計算機語言使用的樣式。它會阻止你從Automatic Semicolon Insertion這可以造成很難本地化的嚴重錯誤。

+0

天啊....非常感謝R代碼裏面。很多信息。你節省了我的時間。 :) – suman

+0

@suman:不客氣! – Oleg