dijit / form / ComboBox是select元素和文本框的混合体。 我有:- 为3个记忆选择3个选项 每次选择“已更改”时,将使用所选内存填充的ComboBox 可以在ComboBox中选择该项。 再次选择内存并在ComboBox中填充
一切似乎都好,但...... 无法更新ComoBox的文本框以反映内存的更改。或者甚至不能将其设置为空白。 我尝试使用值:“”;或者placeHolder:“”;但无济于事。
meter_Select.on('change', function()
{
//registry.byId('batchSelect').destroyrescursive();
console.debug("selected -> " + meter_Select.value);
switch(meter_Select.value)
{
case 'testdata1970_05': var memoStore2 = new Memory({data:response2});
break;
case 'testdata1970_10': var memoStore2 = new Memory({data:response3});
break;
case 'testdata2060_03': var memoStore2 = new Memory({data:response1});
}
//memoStore2.put({"mfg_code":""});// it works but it needs to be moved to the top!
var combx = registry.byId('cardSelect');// at first it will be undefined
console.debug('ComboBox Select(1A) ='+combx);
if(combx)//if combx exists or already defined
{
combx.store = memoStore2;
combx.value = "";
combx.placeHolder = "Choose one of the batch...";
//combx.domAttr.set('cardSelect','displayedValue','');
console.debug('ComboBox Select(1C) ='+combx);
//domAttr.set('batchSelect','store','nemoStore2');
}
else
{// if combx does not exist or is not defined yet
combx = new ComboBox({
id: 'cardSelect',
store: memoStore2,
searchAttr: "mfg_code",
value :"",
placeHolder: "Choose one of the batch..."
}, "node_cardSelect");
console.debug('ComboBox Select(1B) ='+combx);
}
combx.startup();
您可以在jsFiddle Link结帐 请指教。提前致谢
答案 0 :(得分:1)
您应该使用小部件'set()
方法更改其内部属性,就像您应该使用get()
来获取它们一样。
您应该(几乎)永远不会按照您的方式直接访问小部件的属性。
在您的情况下,您想要设置商店和组合框的值,所以:
if(combx)
{
combx.set("store", memoStore2);
combx.set("value", "");
}
else { ....
当您执行combx.value
时,您只是给窗口小部件一个新的内部值,但是窗口小部件没有意识到它。
使用set
方法为小部件提供了对新值执行所有其他必要操作的机会,例如呈现标签,可能是某些验证等。