0

我在 HTML 页面中有以下部分:

<div>
  <label style="margin-right:5px;vertical-align:middle;">Index</label>
  <div data-dojo-type="dojo/store/Memory" data-dojo-id="indexStore"
    data-dojo-props="data: [{id: 1, name: 'ID'}]"></div>
  <input id="indexcombo" name="indexselector" type="text"
    data-dojo-type="dojox/mobile/ComboBox" style="width: 122px;
    vertical-align: middle;" value="ID" data-dojo-props="store:indexStore,
    searchAttr:'name'"></input>
</div>

在一个单独的 JavaScript 文件中,我有这个:

require([
  "dojo/on",
  "dojo/dom",
  "dojo/dom-attr",
  "dojo/request",
  "dojo/json",
  "dojo/_base/array",
  "dojo/_base/window",
  "dojo/dom-construct",
  "dijit/dijit",
  "dijit/registry",
  "dojo/parser",
  "dojo/store/Memory",
  "dojox/mobile",
  "dojox/mobile/deviceTheme",
  "dojox/mobile/Heading",
  "dojox/mobile/Accordion",
  "dojox/mobile/ContentPane",
  "dojox/mobile/FormLayout",
  "dojox/mobile/TextBox",
  "dojox/mobile/SimpleDialog",
  "dojox/io/xhrScriptPlugin",
  "dojox/mobile/RoundRectStoreList",
  "dijit/form/DataList",
  "dojox/mobile/ComboBox",
  "dojox/mobile/Button",
  "dojox/mobile/GridLayout",
  "dojo/domReady!"
  ],

  function(on, dom, domAttr, request, json, array, win, domconstruct, dijit, registry,
           parser, memory, mobile, deviceTheme, heading, accordion, contentpanel,
           formlayout, textbox, simpledialog, xhrscriptplugin, roundrectdatalist,
           datalist, combobox, button, gridlayout)
  {
    var indexcombo = dom.byId("indexcombo");
    var indexcombowidg = registry.byId("indexcombo");
  ...
  }

我只是在扯我的头发。我总能得到 indexcombo 但 indexcombowidg 总是失败。我需要处理 ComboBox 的 onChange 事件,以便可以更改当前索引的值,但是我尝试的任何操作都无法连接到该事件。我正在 Firefox 和 Chrome 中对此进行测试。

任何建议,将不胜感激。我花费数小时在 JavaScript 中做在大多数其他语言中需要几分钟的事情,这变得越来越令人沮丧。

问候, 尼尔

4

2 回答 2

0

这是一个基于您的代码和 dojo/ready 的工作示例。希望这可以帮助。

<!doctype html>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <title>Button</title>

  <script type="text/javascript" src="../deviceTheme.js"></script>
  <script type="text/javascript" src="../../../dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: true"></script>

  <script type="text/javascript">
    require([
      "dojo/ready",
      "dojo/on",
      "dojo/dom",
      "dojo/dom-attr",
      "dojo/request",
      "dojo/json",
      "dojo/_base/array",
      "dojo/_base/window",
      "dojo/dom-construct",
      "dijit/dijit",
      "dijit/registry",
      "dojo/parser",
      "dojo/store/Memory",
      "dojox/mobile",
      "dojox/mobile/deviceTheme",
      "dojox/mobile/Heading",
      "dojox/mobile/Accordion",
      "dojox/mobile/ContentPane",
      "dojox/mobile/FormLayout",
      "dojox/mobile/TextBox",
      "dojox/mobile/SimpleDialog",
      "dojox/mobile/RoundRectStoreList",
      "dijit/form/DataList",
      "dojox/mobile/ComboBox",
      "dojox/mobile/Button",
      "dojox/mobile/GridLayout",
      "dojo/domReady!"
    ],
        function(ready, on, dom, domAttr, request, json, array, win, domconstruct, dijit, registry,
             parser, memory, mobile, deviceTheme, heading, accordion, contentpanel,
             formlayout, textbox, simpledialog, roundrectdatalist,
             datalist, combobox, button, gridlayout)
        {
          ready(function(){
            alert(registry.byId("indexcombo"));
          });

        });
  </script>

</head>
<body style="visibility:hidden;">
<div>
  <label style="margin-right:5px;vertical-align:middle;">Index</label>
  <div data-dojo-type="dojo/store/Memory" data-dojo-id="indexStore"
     data-dojo-props="data: [{id: 1, name: 'ID'}]"></div>
  <input id="indexcombo" name="indexselector" type="text"
       data-dojo-type="dojox/mobile/ComboBox" style="width: 122px;
  vertical-align: middle;" value="ID" data-dojo-props="store:indexStore,
  searchAttr:'name'"></input>
</div>
</body>
</html>
于 2013-08-19T09:24:28.663 回答
0

您是否启用了 parseOnLoad?

<script type="text/javascript" src=".../dojo.js" data-dojo-config="parseOnLoad: true">

如果是,您还必须在调用 registry.byId 之前等待您的应用程序完全初始化。这可以使用 dojo/ready 模块(http://livedocs.dojotoolkit.org/dojo/ready)来实现

于 2013-08-16T11:00:58.483 回答