动态更改选择时避免使用ComboBox的变换

时间:2012-09-05 14:26:55

标签: dojo

我有一个组合框,我已经确认选择的更改应该在满足条件时恢复。

我已经检测到了这个条件但是当我更改了组合框的值和显示值时,与组合框关联的onChange被触发了。以下是我用来更改选择的代码:

dijit.byId('scheduleName').set('value',val,false);
dijit.byId('scheduleName').set('displayedValue',displayVal,false);

我还尝试在触发上面的代码之前将onChange设置为空白,然后重新附加onChange代码,如下所示:

dojo.connect(dijit.byId('scheduleName'),'onChange','');
dijit.byId('scheduleName').set('value',scheduleNameVal,false);
dijit.byId('scheduleName').set('displayedValue',trim(String(scheduleNameName)),false);
dojo.connect(dijit.byId('scheduleName'),'onChange', "hideGrid");

hideGrid是一个javascript函数。我正在使用Dojo 1.8

2 个答案:

答案 0 :(得分:3)

仅设置,而不是 displayedValue

myComboBox.set("value", value, false);

然后才会触发watch回调,而不是dojo/ononChange

检查此jsFiddle以查看差异:http://jsfiddle.net/phusick/d7ymY/

注意:如果您需要trim() displayedValue ,请考虑自定义setterdojo/aspect::before

答案 1 :(得分:1)

您应该使用dojo.disconnect代替

dojo.connect(dijit.byId('scheduleName'),'onChange','');

示例:

var hndl, sched = dijit.byId('scheduleName');
var fnWireOnChange = function(){
  hndl = dojo.connect(sched,'onChange', 'hideGrid');
};

dojo.disconnect(hndl);
sched.set('value',scheduleNameVal,false);
sched.set('displayedValue',trim(String(scheduleNameName)),false);
fnWireOnChange();

作为旁注,我们已弃用connect/disconnect以支持dojo/on

https://dojotoolkit.org/reference-guide/1.8/dojo/on.html#dojo-on