2

我在我的 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 文档,添加 data-dojo-id 标记会生成“一个将创建的 JavaScript 变量,该变量将保存网格对象。然后可以在脚本中引用它。” 但我的 Chromium JS 控制台抱怨“'mainTable' 未定义”。那么这个变量是什么时候创建的,我必须做什么才能访问它?

4

2 回答 2

0

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

于 2012-05-23T13:16:18.523 回答
0

id您在 declaritave 标记中设置的值是文档对象中 domNode 的 id。然后,您尝试运行的 javascript 正在查找该名称的全局变量,该名称与 DOM 中的节点名称完全不同。

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

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

var mainTable = dijit.byId("mainTable");
mainTable.setStore(...);
于 2011-12-27T23:29:18.020 回答