2015-01-14 46 views
-1

網格的數據看起來是這樣的:如何得到處理的細胞領域的ExtJS網格

data: [{ 
    field1: abc 
    field2: [ 
     {value: 0, label: Blue}, 
     {value: 1, label: Green} 
    ] 
}, 
{ 
    field1: def 
    field2: [ 
     {value: 0, label: Red}, 
     {value: 1, label: Pink} 
    ] 
}] 

網格組件配置看起來類似:

{ 
xtype: 'grid', 
.... 
    columns: [ 
     { 
      dataIndex: field1 
     }, 
     { 
      dataIndex: field2 
      editor: { 
       xtype: combobox, 
       displayField: label, 
       valueField: value, 
       store: new someSampleStore(); 
      } 
     } 
    ] 
} 

現在,網格的#2列有一個組合框。 對於網格的第0行第1列;組合框下拉框應顯示以下選項:藍色,綠色 對於網格的第1行第1列;組合框下拉應該顯示這些選項:紅色,粉紅色

我是否需要手動將數據加載到每個組合框(每行)或者有什麼方法可以指定列定義中的配置,以便組合框選擇「 field2'?

+0

我得看看文檔第一http://docs.sencha.com/extjs/5.0/5.0.1-apidocs/#!/api /Ext.grid.plugin.RowEditing-event-beforeedit 嘗試做* *然後回來並特別提出問題。 –

+1

對不起,我意識到這個問題還不夠清楚。我編輯了這個問題。 我沒有嘗試在網格上的cellclick事件,以便我可以獲取該字段並設置組合框的數據。但我無法處理組合框的字段。 – optimusPrime

+0

從提供的信息我猜你可能會更好[PropertyGrid](http://docs.sencha.com/extjs/5.0.1/#!/api/Ext.grid.property.Grid) 。定義一些可用於整個應用程序的常見組合框及其商店,例如Color Combo並使用它們。通常,當所有行在組合中使用相同的值時,將使用帶有組合的編輯器列,以便您只定義一次並且它們都共享它,例如Order Status Combo或類似的東西。 – Scriptable

回答

1

看看下面的代碼。本質上它做你想要的,但只在第一次點擊後才起作用。我會讓你弄清楚。 ;-)

演示:https://fiddle.sencha.com/#fiddle/gec

Ext.application({ 
    name: 'Fiddle', 

    launch: function() { 


     var comboStore = Ext.create('Ext.data.Store', { 
      fields: ['value', 'label'], 
      data: [{ 
       name: '', 
       value: '' 
      }], 
      proxy: { 
       type: 'memory', 
       reader: { 
        type: 'json', 
        rootProperty: 'items' 
       } 
      } 
     }); 

     Ext.create('Ext.data.Store', { 
      storeId: 'employeeStore', 
      fields: ['firstname', 'lastname', 'seniority', 'dep', 'hired'], 
      data: [{ 
       firstname: "Michael", 
       lastname: "Scott", 
       seniority: 7, 
       dep: "Management", 
       hired: "01/10/2004", 
       comboData: [{ 
        label: 'Test1', 
        value: 'testval1' 
       }, { 
        label: 'Test2', 
        value: 'testval2' 
       }, { 
        label: 'Test3', 
        value: 'testval3' 
       }] 
      }, { 
       firstname: "Dwight", 
       lastname: "Schrute", 
       seniority: 2, 
       dep: "Sales", 
       hired: "04/01/2004", 
       comboData: [{ 
        label: 'Dwight1', 
        value: 'testval1' 
       }, { 
        label: 'Dwight2', 
        value: 'testval2' 
       }, { 
        label: 'Dwight3', 
        value: 'testval3' 
       }] 
      }, { 
       firstname: "Jim", 
       lastname: "Halpert", 
       seniority: 3, 
       dep: "Sales", 
       hired: "02/22/2006", 
       comboData: [{ 
        label: 'Jim1', 
        value: 'testval1' 
       }, { 
        label: 'Jim2', 
        value: 'testval2' 
       }, { 
        label: 'Jim3', 
        value: 'testval3' 
       }] 
      }, { 
       firstname: "Kevin", 
       lastname: "Malone", 
       seniority: 4, 
       dep: "Accounting", 
       hired: "06/10/2007", 
       comboData: [{ 
        label: 'Kevin1', 
        value: 'testval1' 
       }, { 
        label: 'Kevin2', 
        value: 'testval2' 
       }, { 
        label: 'Kevin3', 
        value: 'testval3' 
       }] 
      }] 
     }); 

     Ext.create('Ext.grid.Panel', { 
      title: 'Column Demo', 
      store: Ext.data.StoreManager.lookup('employeeStore'), 
      columns: [{ 
       text: 'First Name', 
       dataIndex: 'firstname', 
       editor: { 
        xtype: 'combobox', 
        displayField: 'label', 
        valueField: 'value', 
        store: comboStore, 
        fields: ['value', 'label'] 
       } 
      }, { 
       text: 'Last Name', 
       dataIndex: 'lastname' 
      }, { 
       text: 'Hired Month', 
       dataIndex: 'hired', 
       xtype: 'datecolumn', 
       format: 'M' 
      }, { 
       text: 'Department (Yrs)', 
       xtype: 'templatecolumn', 
       tpl: '{dep} ({seniority})' 
      }], 
      selType: 'cellmodel', 
      plugins: { 
       ptype: 'cellediting', 
       clicksToEdit: 1, 
       listeners: { 
        beforeedit: function(editor, context, eOpts) { 
         testData = context.record.data.comboData; 
         comboStore.setData(testData); 
        } 
       } 
      }, 
      width: 400, 
      forceFit: true, 
      renderTo: Ext.getBody() 
     }); 
    } 
}); 
+0

非常感謝Rob ..它爲我工作.. 關於「它只在第一次點擊後才起作用」,我設置了queryMode:'local'來修復它。 – optimusPrime

+0

@optimusPrime很高興它解決了問題,並且您能夠在第一次點擊時解決問題;) –

+0

但是,是否有可能讓每行中的組合框都有自己的存儲實例,並在網格加載時加載數據第一次 ? 是這樣的 - columns: [ ... \t { \t header: dropdown, \t dataIndex: column2 \t editor: { \t \t \t xtype: 'combobox', \t \t \t displayField: 'label', \t \t \t valueField: 'value', \t \t \t store: new Ext.data.Store({ \t \t \t \t fields:[], \t \t \t \t data: [] \t \t \t }), \t \t \t fields: ['value', 'label'] \t \t } \t } \t \t ] 和電網AfterRender階段活動 - { \t get combobox at grid(row[i], column[1]); // iterate \t { \t \t \t combobox.store.load(data); \t } } optimusPrime