Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过继承_HasDropdown和_AutoCompleterMixin自定义dojo下拉小部件_Dojo - Fatal编程技术网

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

通过继承_HasDropdown和_AutoCompleterMixin自定义dojo下拉小部件,dojo,Dojo,我正在尝试做一个自定义下拉列表,它将查询我自己的一些服务,并相应地更新其下拉菜单。我将继续上的示例,但这并没有描述如何为下拉列表容器创建dom 我是否需要将this.dropDown设置为一些dijit.\uctor中的Widget? 如果需要先创建另一个dijit.\u小部件?如果是,我知道如何通过data dojo attach point更新值,但如果是下拉列表,则需要更新的将是集合。dojo中有没有这样的工具可以处理这种情况下的集合?否则,在每个下拉元素上手动处理清除/填充/事件处理将很

我正在尝试做一个自定义下拉列表,它将查询我自己的一些服务,并相应地更新其下拉菜单。我将继续上的示例,但这并没有描述如何为下拉列表容器创建dom

我是否需要将
this.dropDown
设置为一些
dijit.\u
ctor
中的Widget

如果需要先创建另一个dijit.\u小部件?如果是,我知道如何通过
data dojo attach point
更新值,但如果是下拉列表,则需要更新的将是
集合。dojo中有没有这样的工具可以处理这种情况下的集合?否则,在每个下拉元素上手动处理清除/填充/事件处理将很容易变得混乱。

我创建了一个自定义小部件,它显示在表单上。在这个小部件中,我覆盖了
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) {}
}