【问题标题】:How to create tab panel dynamically in ExtJS?如何在 ExtJS 中动态创建选项卡面板?
【发布时间】:2017-04-06 19:38:12
【问题描述】:

我有一个模型并存储在我的代码中。根据功能,我想从商店动态创建标签。你能分享代码sn-p吗?假设有对应的model和store。

【问题讨论】:

  • 监听商店加载事件,建立你想要添加的项目数组,在标签面板上调用add()

标签: extjs extjs6 extjs6-classic


【解决方案1】:

为此,您首先需要创建选项卡面板

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); 将其添加到我的标签面板中。

注意:这只是示例代码。您必须根据您的要求制作/更改/修改此类代码。

文档中也有很多很好的例子。请看一看。 Doc

【讨论】:

  • 没有“滚动”配置。此外,选项卡面板默认为卡片布局,指定 fit 充其量是多余的。此外,最好维护配置对象并将所有这些推迟到添加时间。
  • @EvanTrimboli 注意。感谢您指出这一点。 .编写此代码时没有检查文档。我只是假设预先定义。是的..那会更好,我只是给出一个想法并专注于事情的运作方式。这些点我以后会记住的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多