关于javascript:在dojo中动态填充ComboBox

Populating ComboBox dynamically in dojo

我正在尝试在dojo中动态填充ComboBox。我已经在html中声明了它,然后尝试在js中创建Memory存储,然后使用我在js中创建的store值设置ComboBox的store属性。这是我的html和javascript文件。我正在js中调用一个函数,该函数以json响应(item)作为其参数,并且响应值即将到来(ResultData1,ResultData2,ResultData3)我已经通过保留警报框进行了测试。但是,当运行此页面时,我收到TypeError:内存不是构造函数错误。有人可以解释一下我在做什么错。

仅供参考:我已在js文件中添加了所有必需的依赖项列表。

HTML:

1
<select data-dojo-type="dijit/form/ComboBox" data-dojo-attach-point="importDocumentTo" id="importDocumentTo" name="importDocumentTo">

JavaScript:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
_onPopulate : function(item) {
                 alert('_onPopulate:');            
                 var combo = dijit.byId('importDocumentTo');
                 alert('combo' + combo)

                 var stateStore=new Memory({
                       data: [
                              {name:item["ResultData1"], id:"data1"},
                              {name:item["ResultData2"], id:"data2"},
                              {name:item["ResultData3"], id:"data3"}
                              ]      
                 });

                 alert('stateStore:' + stateStore);

          var result=domAttr.set("importDocumentTo","store",stateStore);


使用DOM API更新小部件上的商店将不起作用。而不是使用domAttr.set来设置存储,您应该引用窗口??小部件本身并在该窗口小部件上调用set('store', ...)

此外,模板中的小部件上不需要静态id,因为您已经为其分配了附加点。为它分配一个静态id使其不可能一次创建一个以上的窗口小部件实例,因为静态ID在实例之间会发生冲突。

您应该可以通过以下更改来解决您的问题:

  • 从模板中的元素中删除静态id="..."
  • var combo = dijit.byId('importDocumentTo')替换为var combo = this.importDocumentTo(引用附加点而不是ID)
  • domAttr.set("importDocumentTo", ...)替换为combo.set('store', stateStore)