別の問題で戻ってきました...上部にグリッドパネル(セル編集付き)があり、その下にタブ付きパネルがあり、各タブ内に異なるグリッドパネルが呼び出されているページがあります...
私の問題は、ユーザーがトップパネルの行から行へとクリックするにつれて、タブ内のグリッドパネルを変更しようとしていることです...おそらくリスナー/ハンドラーの問題であることはわかっていますが、動作する例...
まず、上部のグリッド パネルのコードは次のとおりです (リスナー/ハンドラーが移動する必要があると思われる場所:
var pluginExpanded = true;
var grid = Ext.create('Ext.grid.Panel', {
height: 350,
width: 700,
title: 'Manufacturer URL Listing with info',
store: store,
tools: [{
type: 'save',
tooltip: 'Save Data',
// hidden:true,
handler: function (event, toolEl, panel) {
// refresh logic
//rowEditing.cancelEdit();
var sm = grid.getSelectionModel();
Ext.Msg.show({
title: 'Update Data',
msg: 'Are you sure you want to update the item information?',
buttons: Ext.Msg.YESNO,
icon: Ext.Msg.QUESTION,
fn: function (btn) {
if (btn === 'yes') {
store.update();
//store.sync();
store.load();
//Ext.getCmp(grid).getView().refresh();
}
}
});
}
}],
columns: [{
dataIndex: 'id',
flex: 1,
text: 'ID',
hidden: true
}, {
dataIndex: 'part_no',
flex: 1,
text: 'Part Number',
editor: 'textfield'
}, {
dataIndex: 'tddb_retail',
flex: 1.3,
text: 'TD Retail',
editor: 'textfield'
}, {
dataIndex: 'tddb_jobber',
flex: 1.3,
text: 'TD Retail',
editor: 'textfield'
}, {
dataIndex: 'tddb_descr',
flex: 1,
text: 'Description',
editor: 'textfield'
}, {
dataIndex: 'tddb_category',
flex: 1,
text: 'Category',
editor: 'textfield'
}, {
dataIndex: 'tddb_subcategory',
flex: 1,
text: 'Sub Category',
editor: 'textfield'
}, ],
forceFit: true,
selType: 'cellmodel',
plugins: [
Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
})],
//paging bar
bbar: Ext.create('Ext.PagingToolbar', {
store: store,
pagesize: 15,
displayInfo: true,
displayMsg: 'Displaying items {0} - {1} of {2}',
emptyMsg: "No items to display",
}),
renderTo: Ext.getBody(),
});
完全なコード (ここにタブ/2 番目のグリッドを含む):
Ext.Loader.setConfig({
enabled: true
});
Ext.Loader.setPath('Ext.ux', '/include/extjs/examples/ux/');
Ext.require([
'Ext.grid.*',
'Ext.data.*',
'Ext.util.*',
'Ext.toolbar.Paging',
'Ext.ux.PreviewPlugin',
'Ext.ModelManager',
'Ext.tip.QuickTipManager',
'Ext.state.*']);
Ext.onReady(function () {
Ext.direct.Manager.addProvider(Ext.app.REMOTING_API);
Ext.tip.QuickTipManager.init();
Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider'));
//added model inside onready
Ext.define('Manufacturer', {
extend: 'Ext.data.Model',
fields: ['id', 'part_no', 'tddb_retail', 'tddb_jobber', 'tddb_descr', 'tddb_category', 'tddb_subcategory']
});
//separated store into unique var for guaranteeRange
var store = Ext.create('Ext.data.Store', {
model: 'Manufacturer',
autoLoad: true,
pageSize: 15,
loadMask: true,
proxy: {
type: 'direct',
// extraParams:{ codes_id: 410 },
api: {
// create: inventory.readManu,
read: inventory.readInventory,
update: inventory.updateInventory,
// destroy: worklist.getResults
},
reader: {
type: 'json',
root: 'data',
totalProperty: 'total',
successProperty: 'success'
},
writer: {
type: 'json',
writeAllFields: true,
encode: false,
root: 'data'
},
listeners: {
exception: function (proxy, response, operation) {
Ext.MessageBox.show({
title: 'REMOTE EXCEPTION',
msg: operation.getError(),
icon: Ext.MessageBox.ERROR,
buttons: Ext.Msg.OK
});
}
},
}
});
store.getProxy().extraParams = {
codes_id: document.getElementById('codes_id').value
};
//create the grid
var pluginExpanded = true;
var grid = Ext.create('Ext.grid.Panel', {
height: 350,
width: 700,
title: 'Manufacturer URL Listing with info',
store: store,
tools: [{
type: 'save',
tooltip: 'Save Data',
// hidden:true,
handler: function (event, toolEl, panel) {
// refresh logic
//rowEditing.cancelEdit();
var sm = grid.getSelectionModel();
Ext.Msg.show({
title: 'Update Data',
msg: 'Are you sure you want to update the item information?',
buttons: Ext.Msg.YESNO,
icon: Ext.Msg.QUESTION,
fn: function (btn) {
if (btn === 'yes') {
store.update();
//store.sync();
store.load();
//Ext.getCmp(grid).getView().refresh();
}
}
});
}
}],
columns: [{
dataIndex: 'id',
flex: 1,
text: 'ID',
hidden: true
}, {
dataIndex: 'part_no',
flex: 1,
text: 'Part Number',
editor: 'textfield'
}, {
dataIndex: 'tddb_retail',
flex: 1.3,
text: 'TD Retail',
editor: 'textfield'
}, {
dataIndex: 'tddb_jobber',
flex: 1.3,
text: 'TD Retail',
editor: 'textfield'
}, {
dataIndex: 'tddb_descr',
flex: 1,
text: 'Description',
editor: 'textfield'
}, {
dataIndex: 'tddb_category',
flex: 1,
text: 'Category',
editor: 'textfield'
}, {
dataIndex: 'tddb_subcategory',
flex: 1,
text: 'Sub Category',
editor: 'textfield'
}, ],
forceFit: true,
selType: 'cellmodel',
plugins: [
Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
})],
//paging bar
bbar: Ext.create('Ext.PagingToolbar', {
store: store,
pagesize: 15,
displayInfo: true,
displayMsg: 'Displaying items {0} - {1} of {2}',
emptyMsg: "No items to display",
}),
renderTo: Ext.getBody(),
});
//start
var assetStore = Ext.create('Ext.data.Store', {
storeId: 'assetStore',
fields: ['item_id', 'link', 'filename'],
proxy: {
type: 'direct',
// extraParams:{ codes_id: 410 },
api: {
read: inventory.getAssets
},
reader: {
type: 'json',
root: 'data',
totalProperty: 'total',
successProperty: 'success'
},
}
});
assetStore.getProxy().extraParams = {
item_id: 1
};
assetStore.load();
Ext.define('assetgrid', {
extend: 'Ext.grid.Panel',
alias: 'widget.assetgrid',
width: 425,
height: 250,
collapsible: true,
store: 'assetStore',
columns: [{
header: 'Item ID',
dataIndex: 'item_id'
}, {
header: 'Link',
dataIndex: 'link',
flex: 1
}, {
header: 'Filename',
dataIndex: 'filename'
}],
height: 200,
width: 400
});
Ext.create('Ext.tab.Panel', {
width: 700,
height: 200,
activeTab: 0,
items: [{
title: 'Item Assets',
xtype: 'assetgrid'
}, {
title: 'Item Description',
bodyPadding: 10,
html: 'link to item assets tab'
}, {
title: 'Item Epi',
bodyPadding: 10,
html: 'link to epi'
}, {
title: 'Item Package',
bodyPadding: 10,
html: 'link to package'
}, {
title: 'Item Price',
bodyPadding: 10,
html: 'link to price'
}, {
title: 'YMM Info',
bodyPadding: 10,
html: 'link to ymm'
} //,
//listview,listview,listview
],
renderTo: Ext.getBody()
});
});
どんな助けでも大歓迎です!私は StackOverflow が大好きです!!!