我在我的 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>
我有一个 JavaScript 函数试图获取此 DataGrid 的句柄并为其分配一个模型:
[...]
mainTable.setStore(new dojo.data.ItemFileWriteStore({ data : data }));
[...]
根据Dojo docs ,添加 data-dojo-id 标签会生成“将创建的 JavaScript 变量,该变量将保存网格对象。然后可以在脚本中引用它。”但是我的 Chromium JS 控制台提示“'mainTable' 未定义”。那么这个变量是什么时候创建的,我需要做什么才能访问它?
最佳答案
您在 declaritave 标记中设置的 id
值是文档对象中 domNode 的 ID。然后您尝试运行的 javascript 正在寻找一个具有该名称的全局变量,该名称与 DOM 中的节点名称完全不同。
有两种方法可以做到这一点。一种是将 jsId="something"
声明为声明性标记的一部分。这将导致 dijit 创建对小部件实例的引用作为名称 something
的全局变量。这可以与您的 DOM 节点 ID 同名,因为它们位于不同的命名空间中(文档对象与全局 javascript 命名空间)。
另一种方法是在您的 javascript 中使用查找函数,通过它的 DOM 节点 ID 查找 javascript 对象,如下所示:
var mainTable = dijit.byId("mainTable");
mainTable.setStore(...);
关于javascript - 如何通过 JS 访问在 HTML 中声明的 Dojo DataGrid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8649648/