在 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 会在实例之间发生冲突。
您应该可以通过以下更改解决您的问题:
- 从模板中的元素中删除静态
id="..."
- 将
var combo = dijit.byId('importDocumentTo')
替换为 var combo = this.importDocumentTo
(引用附加点而不是 ID)
- 将
domAttr.set("importDocumentTo", ...)
替换为combo.set('store', stateStore)
我正在尝试在 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 会在实例之间发生冲突。
您应该可以通过以下更改解决您的问题:
- 从模板中的元素中删除静态
id="..."
- 将
var combo = dijit.byId('importDocumentTo')
替换为var combo = this.importDocumentTo
(引用附加点而不是 ID) - 将
domAttr.set("importDocumentTo", ...)
替换为combo.set('store', stateStore)