javascript - 如何通过 JS 访问在 HTML 中声明的 Dojo DataGrid?

标签 javascript dojo dojox.grid.datagrid

我在我的 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/

相关文章:

javascript - dojo 网格在 div 内不起作用

javascript - javascript 如何从 spring Controller 中的函数获取 ModelAndView 对象

javascript - 我无法摆脱 > 和 < 使用 javascript

javascript - 如何将 dojo javascript 文件导入到 worklight 应用程序中?

dojo - dojo中registry.byId和dom.byId的区别?使用 registry.byId 有什么好处?

javascript - DOJO 错误 ID 已注册

javascript - NodeJs,javascript : . forEach 似乎是异步的?需要同步

javascript - 为什么 jquery 插件函数总是返回对象而不是字符串?

javascript - RequireJS 优化器忽略插件

javascript - Dojox.grid.datagrid 排序顺序