如何在 ExtJS 中动态创建选项卡面板?
How to create tab panel dynamically in ExtJS?
我有一个模型并存储在我的代码中。根据功能,我想从商店动态创建标签。你能分享代码片段吗?假设有相应的模型和商店。
为此你首先需要创建标签面板
datatabpanel = Ext.create('Ext.tab.Panel', {
layout: 'card',
}),
然后在内部选项卡面板中 add
您的元素。在这种情况下,我给出了将网格添加到选项卡面板的示例。
我们首先使用 Ajax 获取响应,然后根据该响应构建网格。网格准备就绪后,我们将动态添加到选项卡面板。
load: function() {
var url = '',
proxyMethod = 'GET';
url = SomeURL;
Ext.Ajax.request({
url: url,
headers: {
"Accept": "application/json; charset=utf-8",
'X-HTTP-Method-Override': "PUT"
},
success: function(res, args) {
var data = Ext.decode(res.responseText);
me.view.mainData = data;
if (data.ROOT.DATA) {
me.buildGrids(data.ROOT.DATA.D, data.ROOT.HEADER);
}
}
})
}
buildGrids: function(data, metaData) {
var p = this,
me = p.view,
cnt = me.down("container[name=gridtabs]"), // This is your container where you placing your grid. You named that as gridtabs.
datatabpanel = Ext.create('Ext.tab.Panel', {
layout: 'card',
}),
newdatagrids = [];
data = Ext.isObject(data) ? [data] : data;
for (var i = 0; i < data.length; i++) {
var value = data[i].NAME; // You can extract from your attributes.
var datasetgrids = Ext.create({
xtype: 'SomeGrid',
storeXml:{"ROOT":{ "DATA":data[i],"HEADER":metaData}}, // This is also depended on how to data is coming.
gridId: data[i]["ID"],
});
newdatagrids.push(datasetgrids);
}
cnt.removeAll();
datatabpanel.add(newdatagrids);
datatabpanel.setActiveTab(0);
cnt.add(datatabpanel);
},
在代码中,您可以看到我们正在创建一个数组 newdatagrids
,然后使用 newdatagrids.push(datasetgrids);
将我的网格放入该数组中
一旦我的 newdatagrids
准备就绪,我将使用 datatabpanel.add(newdatagrids);
.
将其添加到我的标签面板中
注意 :这只是示例代码。根据您的要求,您必须 make/change/modify 这种代码。
文档中也给出了很多很好的例子。请看一看。 Doc
我有一个模型并存储在我的代码中。根据功能,我想从商店动态创建标签。你能分享代码片段吗?假设有相应的模型和商店。
为此你首先需要创建标签面板
datatabpanel = Ext.create('Ext.tab.Panel', {
layout: 'card',
}),
然后在内部选项卡面板中 add
您的元素。在这种情况下,我给出了将网格添加到选项卡面板的示例。
我们首先使用 Ajax 获取响应,然后根据该响应构建网格。网格准备就绪后,我们将动态添加到选项卡面板。
load: function() {
var url = '',
proxyMethod = 'GET';
url = SomeURL;
Ext.Ajax.request({
url: url,
headers: {
"Accept": "application/json; charset=utf-8",
'X-HTTP-Method-Override': "PUT"
},
success: function(res, args) {
var data = Ext.decode(res.responseText);
me.view.mainData = data;
if (data.ROOT.DATA) {
me.buildGrids(data.ROOT.DATA.D, data.ROOT.HEADER);
}
}
})
}
buildGrids: function(data, metaData) {
var p = this,
me = p.view,
cnt = me.down("container[name=gridtabs]"), // This is your container where you placing your grid. You named that as gridtabs.
datatabpanel = Ext.create('Ext.tab.Panel', {
layout: 'card',
}),
newdatagrids = [];
data = Ext.isObject(data) ? [data] : data;
for (var i = 0; i < data.length; i++) {
var value = data[i].NAME; // You can extract from your attributes.
var datasetgrids = Ext.create({
xtype: 'SomeGrid',
storeXml:{"ROOT":{ "DATA":data[i],"HEADER":metaData}}, // This is also depended on how to data is coming.
gridId: data[i]["ID"],
});
newdatagrids.push(datasetgrids);
}
cnt.removeAll();
datatabpanel.add(newdatagrids);
datatabpanel.setActiveTab(0);
cnt.add(datatabpanel);
},
在代码中,您可以看到我们正在创建一个数组 newdatagrids
,然后使用 newdatagrids.push(datasetgrids);
一旦我的 newdatagrids
准备就绪,我将使用 datatabpanel.add(newdatagrids);
.
注意 :这只是示例代码。根据您的要求,您必须 make/change/modify 这种代码。
文档中也给出了很多很好的例子。请看一看。 Doc