如何通过JS访问HTML中声明的Dojo DataGrid

how to access via JS a Dojo DataGrid declared in HTML?

本文关键字:声明 Dojo DataGrid HTML 何通过 JS 访问      更新时间:2023-09-26

我有一个Dojo DataGrid定义在我的HTML:

<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>

,我有一个JavaScript函数,试图得到这个DataGrid的句柄,并分配一个模型给它:

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

根据Dojo文档,添加data-dojo-id标签将生成一个JavaScript变量,该变量将被创建以保存网格对象。然后可以在脚本中引用。"但是我的Chromium JS控制台抱怨"'mainTable'是未定义的"。那么这个变量是什么时候创建的在访问它之前我需要做些什么呢?

您在声明标记中设置的id值是文档对象中domNode的id。javascript,你然后试图运行正在寻找一个全局变量的名称,这是不一样的东西在DOM中的节点名称。

有两种方法可以做到这一点。一种是将jsId="something"声明为声明性标记的一部分。这将导致dijit创建对小部件实例的引用,作为名称为something的全局变量。这可以与你的DOM节点id相同,因为它们在不同的命名空间(文档对象vs全局javascript命名空间)。

另一种方法是在javascript中使用查找函数通过DOM节点id查找javascript对象,如下所示:

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

data-dojo-id用于声明存储,而不是小部件。然后,这将创建一个在data-dojo-id中指定名称的全局变量,您可以从javascript中引用它。