在 dojo 中动态填充 ComboBox

Populating ComboBox dynamically in dojo

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

仅供参考:我已经在我的 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);

使用 DOM API 更新小部件上的商店是行不通的。不要使用 domAttr.set 来设置商店,您应该引用小部件本身并在小部件上调用 set('store', ...)

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

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

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