dojo EdgeToEdgeList:以编程方式设置商店

时间:2016-11-20 23:57:09

标签: javascript dojo

这是一个非常简单的dojo代码段,不起作用:

require([
  "dojo/parser",
  "dojo/on",
  "dojo/dom",
  "dijit/registry",
  "dojox/mobile/EdgeToEdgeStoreList",
  "dojox/mobile/EdgeToEdgeList",
  "dojo/store/Memory",
  "dojo/domReady!"
], function(parser, on, dom, registry, EdgeToEdgeStoreList, Memory) {
  parser.parse();

  var records = [{
    deviceID: "1",
    state: "done"
  }, {
    deviceID: "2",
    state: "idle"
  }];

  var store = new Memory({
    data: records,
    idProperty: "deviceID"
  });

  registry.byId("list").setStore(store);  
});
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.11.2/dojox/mobile/deviceTheme.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.11.2/dojo/dojo.js" djConfig="parseOnLoad: false, async: true"></script>
<div data-dojo-type="dojox/mobile/ScrollableView">
  <ul id="list" data-dojo-type="dojox/mobile/EdgeToEdgeStoreList" data-dojo-props="itemMap: {deviceID: 'label'}, select: ''"></ul>
</div>

找不到list项。 填充商店并将其设置为列表的方法是否正确? 我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

这不起作用的主要原因是parser.parse()也是异步的,所以你应该等待它完成。

dojo/domReady!dojo/ready之间存在差异,在您的情况下,您应该实际使用dojo/ready,因为您已将parseOnLoad配置设置为false (见更多here)。

现在,由于dojo/ready会在执行代码之前自动等待所有解析调用完成,所以你应该这样:

parser.parse();
ready(function() {
  // put your logic in here
});

另一个选择是注册回调:

parser.parse().then(function() {
   // put your logic here
});

最简单的方法是将parseOnLoad选项设置为true,然后您可以从代码中删除parser.parse(),其他所有内容都可以保持不变。

作为一个注释,我在原始代码段中注意到的一个小错误是您从模块函数的参数中缺少EdgeToEdgeList

相关问题