通过继承_HasDropdown和_AutoCompleterMixin自定义dojo下拉小部件

时间:2012-05-10 12:32:14

标签: dojo

我正在尝试执行自定义下拉菜单,该下拉菜单将查询某些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将很容易变得混乱。

1 个答案:

答案 0 :(得分:1)

我创建了一个自定义窗口小部件,它是窗体上显示的内容。在此小部件中,我覆盖了openDropDowncloseDropDown函数。在我的情况下,下拉列表足够复杂,以便在关闭时更容易销毁它,并在每次用户重新创建

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) {}
}