我无法像this小提琴中所解释的那样显示Dojo Combobox。我添加了Dijit.js,Dojo.js,Ready.js和memory.js的引用。我通过发出警报验证我的脚本执行,但Combobox根本没有显示。我错过了什么?
以下是我的HTML:
<div id="stateSelect"></div>
以下是我的JS脚本
<script>
require(["dojo/store/Memory", "dijit/form/ComboBox", "dojo/ready"],function(Memory, ComboBox){
var ss = 'Abas Store, Accounts';
ss = ss.split(',');
var data = [];
dojo.forEach(ss, function(item, idx) {data.push({id: idx,name: item});});
var stateStore = new Memory({data: data});
var comboBox = new ComboBox({name: "select",value: "Select...",store: stateStore,searchAttr: "name"},"stateSelect");
});
</script>
添加了以下JS引用,并且每个引用都可以访问:
<script type="text/javascript" src="/webapp/js/dojo/1.9.2/dojo/dojo.js"></script>
<script type="text/javascript" src="/webapp/js/dojo/1.9.2/dojo/ready.js"></script>
<script type="text/javascript" src="/webapp/js/dojo/1.9.2/dojo/store/memory.js></script>
<script type="text/javascript" src="/webapp/js/dojo/1.9.2/dijit/form/ComboBox.js"></script>
在“Dimitri M”回复后编辑显示快照(参考我的评论):
答案 0 :(得分:0)
我在这里看到一些不正确的事情:
首先,您只需加载AMD加载程序(dojo.js
),所有其他文件都由它自动加载,这意味着您可以删除:
<script type="text/javascript" src="/webapp/js/dojo/1.9.2/dojo/ready.js"></script>
<script type="text/javascript" src="/webapp/js/dojo/1.9.2/dojo/store/memory.js></script>
<script type="text/javascript" src="/webapp/js/dojo/1.9.2/dijit/form/ComboBox.js"></script>
我注意到的第二件事(也就是你所指的例子)是它缺少等待DOM加载的正确事件。您应该将dojo/ready
替换为dojo/domReady!
。这将确保仅在加载DOM时才加载回调。
如果您不等待DOM,那么您的脚本可能找不到div #stateSelect
,然后网格将无法加载(我认为这是您的问题)。
我也有推荐(不是错误),如果您使用的是新版本的Dojo,则不应使用dojo.forEach()
,该语法实际上已弃用且应由dojo/_base/array
替换具有类似forEach()
功能的模块。
但你需要的不是forEach()
函数,而是map()
函数将你的字符串数组映射到一个对象数组。
我将您使用的示例更新为我提供的建议,您可以找到here。