2012-05-10 10 views
0

私自身のサービスの一部を照会し、それに応じてドロップダウンメニューを更新するカスタムドロップダウンをしようとしています。私はhttp://livedocs.dojotoolkit.org/dijit/_HasDropDownの例に従っていますが、ドロップダウンコンテナのDOMを作成する方法については説明していません。カスタムDojoドロップダウンウィジェット、_HasDropdownおよび_AutoCompleterMixinを継承する

this.dropDowndijit._Widgetに設定する必要がありますか?ctor? 別のdijit._widgetを最初に作成する必要がある場合は、はいの場合私は知っている値を更新する方法By data-dojo-attach-pointしかし、ドロップダウンの場合は更新する必要があるcollectionになります。このような状況のためにコレクションを処理できるツールがdojoにはありますか?そうでなければ、このドロップダウン要素のそれぞれの手作業でclearing/filling/event-handleingを処理すると、簡単に乱雑になります。

答えて

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) {} 
} 
関連する問題