我正在尝试执行自定义下拉菜单,该下拉菜单将查询某些My Own服务并相应地更新其下拉菜单。我正在关注http://livedocs.dojotoolkit.org/dijit/_HasDropDown
上的示例但是这并没有描述如何为下拉容器创建dom。
我是否需要将this.dropDown
设置为dijit._Widget
中的某些ctor
?
如果需要先创建另一个dijit._widget
?如果是,我知道如何更新值data-dojo-attach-point
但是如果下拉,则需要更新collection
。在dojo中是否有任何可以处理此类情况的集合的工具?否则,在每个下拉元素上手动处理clearing/filling/event-handleing
将很容易变得混乱。
答案 0 :(得分:1)
我创建了一个自定义窗口小部件,它是窗体上显示的内容。在此小部件中,我覆盖了openDropDown
和closeDropDown
函数。在我的情况下,下拉列表足够复杂,以便在关闭时更容易销毁它,并在每次用户重新创建
dojo.declare("TextboxWithCustomDropdown",
[dijit.form.ValidationTextBox, dijit._HasDropDown], {
openDropDown: function() {
if(!this.dropDown) {
var _s = this;
this.dropDown = new MyCustomDropDown({...});
this.dropDown.connect(this.dropDown, 'onChange', function(val) {
_s.closeDropDown();
_s.attr('value', val);
});
}
this.inherited(arguments);
},
closeDropDown: function() {
this.inherited(arguments);
if (this.dropDown) {
this.dropDown.destroy();
this.dropDown = null;
}
}
});
dojo.declare("MyCustomDropDown", [dijit._Widget, dijit._Templated], {
templateString: ...
// when the user makes their selection in the dropdown, I call the onChange
// function, and the textbox is listenting on this
onChange: function(/*Object*/ value) {}
}