2011-12-27 28 views
2

我有一個DataGrid的道場在我的HTML定義:如何通過JS訪問HTML中聲明的Dojo DataGrid?

<table data-dojo-type="dojox.grid.DataGrid" data-dojo-id="mainTable"> 
    <thead> 
    <tr> 
     <th field="id" width="128px">id</th> 
     <th field="foo" width="128px">foo</th> 
     <th field="bar" width="128px">bar</th> 
     <th field="baz" width="128px">baz</th> 
    </tr> 
    </thead> 
</table> 

,我已經得到了試圖得到一個處理這個DataGrid和分配模式,它的JavaScript函數:

[...] 

mainTable.setStore(new dojo.data.ItemFileWriteStore({ data : data })); 

[...] 

根據Dojo docs,添加data-dojo-id標記會生成「將被創建的JavaScript變量,該變量將保存網格對象,然後可以在腳本中引用該變量。」但我的Chromium JS控制檯抱怨「'mainTable'未定義」。那麼,什麼時候創建了這個變量,在我可以訪問它之前我該做些什麼?

+0

你是否在dojo.ready塊內調用mainTable.setStore?你使用parseOnLoad:true?如果不是,你是否調用解析器? – Philippe 2011-12-28 16:02:36

回答

0

您在declaritave標記中設置的id值是文檔對象中domNode的ID。然後,您嘗試運行的JavaScript正在通過該名稱查找全局變量,該名稱與DOM中的節點名稱完全不同。

有兩種方法可以做到這一點。一種是聲明jsId="something"作爲聲明性標記的一部分。這將導致dijit創建對widget實例的引用,作爲名稱something的全局變量。這可以與您的DOM節點ID具有相同的名稱,因爲它們位於不同的名稱空間中(文檔對象與全局JavaScript名稱空間)。

的另一種方式來做到這一點是使用查找功能在你的JavaScript找到JavaScript對象通過它的DOM節點ID是這樣的:

var mainTable = dijit.byId("mainTable"); 
mainTable.setStore(...); 
+0

如果dojo-data-id只是設置了domNode的id,那麼我想我沒有看到它的需要 - 爲什麼我不能直接用id =「mainTable」設置id?無論如何,我已經嘗試添加'jsId'屬性並調用'dijit.byId()',但都不工作;現在我收到了一條不同的錯誤消息,「無法調用未定義的方法'setStore'」。 – 2011-12-28 15:03:21

0

data-dojo-id用於聲明實體店,而不是小工具。然後創建一個在data-dojo-id中指定名稱的全局變量,您可以從javascript中引用該變量。

相關問題