0

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すると、簡単に面倒になります。

4

1 に答える 1

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) {}
}
于 2012-05-10T13:34:56.250 に答える