dojo1.8 - 更新内存时无法刷新ComboBox的输入文本框

时间:2013-03-15 06:54:37

标签: dojo

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结帐 请指教。提前致谢

1 个答案:

答案 0 :(得分:1)

您应该使用小部件'set()方法更改其内部属性,就像您应该使用get()来获取它们一样。

您应该(几乎)永远不会按照您的方式直接访问小部件的属性

在您的情况下,您想要设置商店和组合框的值,所以:

    if(combx)
    {
        combx.set("store", memoStore2);
        combx.set("value", "");
    }
    else { ....

当您执行combx.value时,您只是给窗口小部件一个新的内部值,但是窗口小部件没有意识到它。

使用set方法为小部件提供了对新值执行所有其他必要操作的机会,例如呈现标签,可能是某些验证等。