在dojo中动态填充ComboBox

时间:2015-06-24 08:36:04

标签: javascript html dojo dijit.form

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

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

HTML:

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

JavaScript的:

_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);

1 个答案:

答案 0 :(得分:2)

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

此外,模板中的小部件不需要静态id,因为您已经为它指定了附加点。为它分配静态id使得无法一次创建多个小部件实例,因为静态ID会在实例之间发生冲突。

您应该能够通过以下更改解决问题:

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