2011-12-27 60 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中引用该变量。