Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过JS访问HTML中声明的Dojo数据网格?_Javascript_Dojo_Dojox.grid.datagrid - Fatal编程技术网

Javascript 如何通过JS访问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> <

我在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>
      <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?如果没有,您是否调用了解析器?