Javascript 如何通过JS访问HTML中声明的Dojo数据网格?
我在HTML中定义了一个Dojo数据网格:Javascript 如何通过JS访问HTML中声明的Dojo数据网格?,javascript,dojo,dojox.grid.datagrid,Javascript,Dojo,Dojox.grid.datagrid,我在HTML中定义了一个Dojo数据网格: <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> <
<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>
根据,添加数据dojo id标记会生成“一个JavaScript变量,该变量将被创建以保存网格对象。然后可以在脚本中引用。”但我的Chromium JS控制台会抱怨“mainTable”未定义”。那么这个变量是什么时候创建的?在访问它之前我必须做什么?您在declaritave标记中设置的
id
值是document对象中domNode的id。然后您尝试运行的javascript正在寻找一个全局变量,该变量的名称与DOM中的节点名称完全不同
有两种方法可以做到这一点。一种是将jsId=“something”
声明为声明性标记的一部分。这将导致dijit创建对小部件实例的引用,作为名称something
的全局变量。这可能与DOM节点id的名称相同,因为它们位于不同的名称空间(文档对象与全局javascript名称空间)
另一种方法是在javascript中使用查找函数,通过其DOM节点id查找javascript对象,如下所示:
var mainTable = dijit.byId("mainTable");
mainTable.setStore(...);
declaritave标记中设置的
id
值是文档对象中domNode的id。然后您尝试运行的javascript正在寻找一个全局变量,该变量的名称与DOM中的节点名称完全不同
有两种方法可以做到这一点。一种是将jsId=“something”
声明为声明性标记的一部分。这将导致dijit创建对小部件实例的引用,作为名称something
的全局变量。这可能与DOM节点id的名称相同,因为它们位于不同的名称空间(文档对象与全局javascript名称空间)
另一种方法是在javascript中使用查找函数,通过其DOM节点id查找javascript对象,如下所示:
var mainTable = dijit.byId("mainTable");
mainTable.setStore(...);
数据dojo id
用于声明存储,而不是小部件。然后,这将创建一个全局变量,该变量的名称在数据dojo id
中指定,您可以从javascript引用该变量。数据dojo id
用于声明存储,而不是小部件。然后,这将创建一个全局变量,该变量的名称在数据dojo id
中指定,您可以从javascript中引用该变量。如果dojo数据id只是设置domNode的id,那么我想我看不出需要它-为什么我不能直接用id=“mainTable”
设置id?不管怎样,我尝试了添加一个jsId
属性和调用dijit.byId()
两种方法,但都不起作用;我现在收到一条不同的错误消息,“无法调用未定义的方法'setStore'”。如果dojo数据id只是设置domNode的id,那么我想我看不到它的必要性-为什么我不能直接用id=“mainTable”
设置id?不管怎样,我尝试了添加一个jsId
属性和调用dijit.byId()
两种方法,但都不起作用;我现在收到一条不同的错误消息,“无法调用未定义的方法'setStore'。是否在dojo.ready块中调用mainTable.setStore?您是否使用parseOnLoad:true?如果没有,是否调用了解析器?是否在dojo.ready块中调用mainTable.setStore?您是否使用parseOnLoad:true?如果没有,您是否调用了解析器?