尽管添加了所需的资源,但无法显示动态Dojo Combobox

时间:2014-01-31 09:56:57

标签: dynamic combobox dojo

我无法像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”回复后编辑显示快照(参考我的评论): enter image description here

1 个答案:

答案 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