我试图在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);
答案 0 :(得分:2)
使用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)