Создание TriggerField с всплывающим окном - PullRequest
1 голос
/ 12 апреля 2010

Я построил triggerField, и когда я нажимаю на него, я хочу иметь всплывающее окно, которое добавляется к кнопке в поле триггера (поэтому, когда я нажимаю где-либо еще, оно исчезает, и оно выскакивает до кнопки я нажимаю на кнопку, как всплывающее окно выбора даты)

Мне как-то удалось сделать что-то подобное с Ext.window, но смещение и положение не совпадают.

Это все должно содержаться в редакторе строк. мой код:

new Ext.grid.GridPanel({
        store: Store,
        region:'center',
        height:150,
        //minWidth:700,
        autoScroll:true,
        listeners:{},
        plugins:[new Ext.ux.grid.RowEditor()],
      tbar: [{
            iconCls: 'icon-user-add',
            text: ' hinzufügen',
            handler: function(){
                alert("abc");
            }
        },{
            ref: '../removeBtn',
            iconCls: 'icon-user-delete',
            text: 'löschen',
            disabled: true,
            handler: function(){
                editor.stopEditing();
                var s = grid.getSelectionModel().getSelections();
                for(var i = 0, r; r = s[i]; i++){
                    store.remove(r);
                }
            }
        }],
        columns: [{
            header: 'Monate',
            dataIndex: 'MONAT',
            width: 50,
            sortable: true,
            editor: 
                new Ext.form.TriggerField({"id":"EditorMonate",items:[],
                    "onTriggerClick":function(thiss){
                    if(!Ext.getCmp("autoWMonate")){
                    var monate=new Ext.Window({"x":Ext.getCmp("EditorMonate").x,closeAction:"hide",width:275,id:"autoWMonate",layout:"table",layoutConfig: {columns: 10}});
                    var text;
                    for(var mon=1;mon<13;mon++){
                    text=mon;
                    mon?mon:text="0";
                    if(mon<10)
                        text="0"+mon;
                            monate.items.add(
new Ext.Button({cls:"x-btn",value:parseInt(text),selected:true,"text":text,id:text
                        }}}));}
                    }              Ext.getCmp("autoWMonate").hidden?Ext.getCmp("autoWMonate").show():Ext.getCmp("autoWMonate").hide();
                }})
        }
        }]
    })

Ответы [ 2 ]

1 голос
/ 19 апреля 2010

Проблема решена с:

{
  header: 'WochenTage',
  dataIndex: 'WOCHE',
  width: 100,
  sortable: true,
  editor: new Ext.form.TriggerField({
    onTriggerClick: function(e) {
      if (!this.menu) {
        this.menu = new Ext.menu.Menu({
          items:[{xtype:"label",text:"1"},{xtype:"label",text:"2"}]
          // the items should have event listeners that set the field value accordingly 
        });
      }
      // here you would want to sync the items in the menu with the field value (this.getValue())
      // before you show the menu -- keep in mind that the menu and its children might not be rendered yet
      this.menu.showAt(e.getXY()); // or this.menu.show(this.getEl(), 'tl-bl?');
    }
  })
}
0 голосов
/ 15 апреля 2010

Я сделал что-то подобное, посмотрев на код средства выбора даты и обобщив там идею - используйте компонент меню для поведения всплывающего окна и поместите все, что вам нравится, в качестве отдельного компонента, содержащегося в меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...