2012-10-02 3 views
1

우리는이 같은 모델의 필드와 상점이 : 위해 xtype의 NameCombo과 같이 정의선택시 ComboBox 항목 'id'를 그리드의 다른 열로 설정하는 방법?

me.columns = [ 
    { 
     header:"Name", 
     dataIndex:"name_id", 
     hide: true 
    }, 
    { 
     header:"Name", 
     dataIndex:"name", 
     xtype: 'combocolumn', 
     editor: { 
      xtype:'NameCombo', 
      dataIndex:"name_id" 
     }, 
     filter: true 
    }, 
] 

가 :

Ext.define("NameCombo",{ 
    extend: "Ext.form.ComboBox", 

    triggerAction: 'all', 
    displayField: 'name', 
    valueField: 'id', 
    lazyRender: true, 
    editable: false, 
    store: "Store", 
    alias: ['widget.NameCombo'], 
}); 

말할 수있는 사람

fields: ["name_id", "name"] 

우리는이 같은 열이 그리드를 , 어떻게 구성 할 수있는 다른 열에 콤보 상자 항목 'ID'를 설정할 수 있습니다 'dataIndex : "name_id"'NameCombo 안에?

답변

0

나는 하나의 해결책을 가지고있다.

아래와 같이 NameCombo 위젯을 변경하면 'id'를 레코드의 다른 필드로 설정할 수 있습니다.

Ext.define("NameCombo",{ 
    extend: "Ext.form.ComboBox", 

    displayField: 'name', 
    valueField: 'name', 
    keyField: 'id', 

    triggerAction: 'all', 
    lazyRender: true, 
    editable: false, 
    store: "Store", 
    alias: ['widget.NameCombo'], 

    initComponent: function(){ 
     var me = this; 

     me.listeners = { 
      select: me.itemChanged 
     }; 

     this.callParent(); 
    }, 

    itemChanged: function(combo, records, eOpts) 
    { 
     var me = this; 

     Ext.Array.each(records, function(record) { 
      if (me.dataIndex) { 
       var grid = me.scope; 
       var sm = grid.getSelectionModel(); 
       var lastRow = sm.getLastSelected();     
       var columns = me.scope.columns, 
        i, columnsLength, column;   
       var id = record.data[me.keyField]; 

       lastRow.set(me.dataIndex,id); 

       //TODO: Is there any simple way to update the value in the column of the grid? 
       for (i = 0, columnsLength = columns.length; i < columnsLength; i++) { 
        column = columns[i]; 
        if (column.dataIndex === me.dataIndex) { 
         column.getEditor().setValue(id); 
        } 
       } 
      } 
     }) 

}); 

더 좋은 해결책이 있습니까?

관련 문제