2012-10-05 82 views
1

我試了一下,但沒有奏效。動態地給模型賦值

我有兩個網格和一個按鈕。最初,第二個網格將保持爲空,並且第一個網格將包含一些記錄。當我在第一個網格中選擇幾條記錄並單擊該按鈕時,第二個網格應該只填充第一個網格的選定行。

這裏是我的代碼:

Ext.QuickTips.init(); 

var getLocalStore = function() { 
    return Ext.create('Ext.data.ArrayStore', { 
     model: 'Company', 
     data: Ext.grid.dummyData 
    }); 
}; 

var getSelectedStore = function() { 
    return Ext.create('Ext.data.ArrayStore', { 
     model: 'Company' 
    }); 
}; 

var sm = Ext.create('Ext.selection.CheckboxModel'); 

var grid1 = Ext.create('Ext.grid.Panel', { 
    id: 'grid1', 
    store: getSelectedStore(), 
    columns: [ 
     {text: "Company", width: 200, dataIndex: 'company'}, 
     {text: "Price", renderer: Ext.util.Format.usMoney, dataIndex: 'price'}, 
     {text: "Change", dataIndex: 'change'}, 
     {text: "% Change", dataIndex: 'pctChange'}, 
     {text: "Last Updated", width: 135, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'} 
    ], 
    columnLines: true, 
    width: 600, 
    height: 300, 
    frame: true, 
    title: 'Framed with Checkbox Selection and Horizontal Scrolling', 
    iconCls: 'icon-grid', 
    renderTo: 'grid1' 
}); 

var grid2 = Ext.create('Ext.grid.Panel', { 
    id: 'grid2', 
    store: getLocalStore(), 
    selModel: sm, 
    columns: [ 
     {text: "Company", width: 200, dataIndex: 'company'}, 
     {text: "Price", renderer: Ext.util.Format.usMoney, dataIndex: 'price'}, 
     {text: "Change", dataIndex: 'change'}, 
     {text: "% Change", dataIndex: 'pctChange'}, 
     {text: "Last Updated", width: 135, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'} 
    ], 
    columnLines: true, 
    width: 600, 
    height: 300, 
    frame: true, 
    title: 'Framed with Checkbox Selection and Horizontal Scrolling', 
    iconCls: 'icon-grid', 
    renderTo: 'grid' 
}); 

Ext.widget('button', { 
text: 'Click Me', 
renderTo: 'btn', 
listeners: { 
    click: function(this1, evnt, eOpts){    
     var records = sm.getSelection(); 
     getSelectedStore().loadData(records,true); 
     grid1.getView().refresh(); 
     /*Ext.each(records, function (record) { 
      alert(record.get('company')); 
     });*/ 
    } 
} 
}); 

請讓我什麼錯。

回答

1

首先,您正在定義函數getSelectedStoregetLocalStore,它們在調用時返回新的商店實例。這種方式在你的點擊處理程序中,你每次都會抓取一個空的商店!失去功能位,只是一組變量是這樣的:

var storeToSelectFrom = Ext.create('Ext.data.ArrayStore', { 
    model: 'Company', 
    data: someDataToChooseFrom 
}); 

var storeToPutTo = Ext.create('Ext.data.ArrayStore', { 
    model: 'Company' 
}); 

然後,用這些變量作爲存儲定義網格:

var grid1 = Ext.create('Ext.grid.Panel',{ 
    store: storeToSelectFrom, 
    selType: 'checkboxmodel' 
    // rest of your configs 
}); 

var grid2 = Ext.create('Ext.grid.Panel',{ 
    store: storeToPutTo 
    // rest of your configs 
}); 

然後,創建一個單擊處理按鈕:

Ext.widget('button', { 
    handler: function (button, event) { 
     var selected = grid1.getSelectionModel().getSelection(); 
     grid2.getStore().add(selected); 
    } 
    // rest of your configs 
}); 
+0

好的,這是有效的。如果我刪除該函數,那麼我在按鈕處理程序中寫的代碼也可以正常工作。你能建議哪種方法更好嗎? – user182944

+1

調用'loadData'會觸發刷新事件,因此您可能不需要手動刷新網格視圖,但否則,您的方式就好了。 – tuespetre

+0

現在我有一個場景,其中由第一個網格的選定行填充的第二個網格將在商店模型中包含一些額外的列以及第一個網格商店模型的所有現有列。我不確定如何達到/處理這個要求。請讓我知道這件事。 – user182944