dojo EdgeToEdgeList:以编程方式设置商店
dojo EdgeToEdgeList: programmatically set the store
这里是一个非常简单的 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
项目。
填充商店并将其设置为列表的方式是否正确?
我的错误在哪里?
这不起作用的主要原因是 parser.parse()
也是异步的,因此您应该等待它完成。
dojo/domReady!
和 dojo/ready
之间存在差异,在您的情况下,您实际上应该使用 dojo/ready
,因为您将 parseOnLoad
配置设置为 [=17] =](查看更多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
。
这里是一个非常简单的 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
项目。
填充商店并将其设置为列表的方式是否正确?
我的错误在哪里?
这不起作用的主要原因是 parser.parse()
也是异步的,因此您应该等待它完成。
dojo/domReady!
和 dojo/ready
之间存在差异,在您的情况下,您实际上应该使用 dojo/ready
,因为您将 parseOnLoad
配置设置为 [=17] =](查看更多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
。