Extjs5項目進行中(二)

來源:互聯網
上載者:User

標籤:des   blog   http   io   os   ar   for   資料   2014   

 

先看看頁面效果:

 

菜單和菜單的子頁面是分開載入的。頁面代碼如下:

注意:樹形結構設定為:001,001001,001001001。當前載入的是所有頁面資訊。所以,資料來源綁定的時候,要分開操作。先綁定根節點,再根據根節點遞迴當前根節點的所有子節點。

Ext.define(‘Lz.view.Main.mainLeftTree‘, {
  extend: ‘Ext.panel.Panel‘,
  xtype: ‘MenuTree‘,
  layout: {
    type: ‘accordion‘,
    titleCollapse: true,
    animate: true,
    fill: true
  },
  items: [],
  //擷取菜單資料來源
  initComponent: function () {
    var fields = [];
    Ext.Ajax.request({
      async: false,
      url: ‘/WebService/Systems/SystemPageInfo.asmx/GetPageInfo‘,
      params: {},
      method: ‘POST‘,
      success: function (response, otps) {
        var json =JSON.parse(response.responseText);
        fields = json;
      }
    });
    var itemArr=[];
    for (var i = 0; i < fields.length; i++) {
      //id長度為3則為功能表項目根節點。進入載入子節點
      if (fields[i].page_id.length == 3) {
      var nodes = new Array();
      nodes = getTreeNodesItem(fields, fields[i].page_id, 3, nodes);

      //定義樹的treestore
      var store = Ext.create(‘Ext.data.TreeStore‘, {
        root: {
          expanded: true,
          children: nodes//朋友說這樣載入不好,我也不知道到底怎麼載入比較好,暫時先用著。
        }
      })
    //定義treepanel
    var tree = Ext.create(‘Ext.tree.Panel‘, {
      store: store,
      xtype: ‘treepanel‘,
      rootVisible: false,
      titleCollapse:true,
      autoScroll: true,

      //單擊事件,單擊開啟頁面,暫時開啟的都是同一個頁面
      listeners: {
        ‘itemclick‘: function (obj, model, items, index, e) {
          ShowPanel(obj, model, items, index, e);
        }
      },
    renderTo: Ext.getBody()
    });

    //為菜單添加根節點
    var item = {};
    item.title = fields[i].page_name;
    item.items = [tree];
    item.layout= ‘fit‘;
    itemArr.push(item);
  }
}
this.items = itemArr;
this.callParent(arguments);
}

});

function ShowPanel(me, rec, item, index, e) {
  var mainPanel = Ext.getCmp(‘centerTabPanel‘);
  var parentNode = rec.parentNode;
  var path = rec.get(‘page_url‘);
  var text = rec.get(‘text‘);
  if (!rec.isLeaf()) {
    return;
  }

  path = ‘Lz.view.Systems.PageManagerView‘;

  var thisPanel = Ext.getCmp(‘mainLeftTree‘ + ‘Tab‘);
  if (!thisPanel) {
    thisPanel = new Ext.create(path, {
      id: ‘mainLeftTree‘ + ‘Tab‘,
      title: text
    });
    mainPanel.add(thisPanel).show();
  } else {
    mainPanel.setActiveTab(thisPanel);
  }
}

//遞迴遍曆當前根節點下面所有子節點
function getTreeNodesItem(obj,pageid,lens,nodes)
{
  for (var i = 0; i < obj.length; i++)
  {
    if (obj[i].page_id.length == (lens + 3) && obj[i].page_id.substring(0, lens) == pageid)
    {
      var node = {};
      node.parentId = pageid;
      node.id = obj[i].page_id;
      node.text = obj[i].page_name;

      node.leaf = true;
      node.children = new Array();
      nodes.push(node);
      getTreeNodesItem(obj, obj[i].page_id, obj[i].page_id.length, nodes);
    }
  }
  return updateTreeNodesItemLeaf(nodes);
}

//迴圈將最後一個子節點leaf 改為false

function updateTreeNodesItemLeaf(nodes)
{
  for (var i = nodes.length - 1; i >= 0; i--) {
    var currentNode = nodes[i];

    if (currentNode.parentId == "") {
      continue;
    }

    var parent = getParent(currentNode, nodes);

    if (parent == null) {
      continue;
    }
    parent.leaf = false;
    parent.children.push(currentNode);
    nodes.splice(i, 1);
  }

  return nodes;
}

function getParent(child, nodes) {
  var parent = null;
  for (var i = 0; i < nodes.length; i++) {
    if (nodes[i].id === child.parentId) {
      return nodes[i];
    }
  }
  return parent;
}

 

  

Extjs5項目進行中(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.