国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

extjs-mvc結(jié)構(gòu)實踐(三):完善基本頁面2

X1nFLY / 3076人閱讀

摘要:結(jié)構(gòu)實踐三完善基本頁面一般經(jīng)典的后臺管理系統(tǒng),都是左側(cè)菜單右側(cè)結(jié)構(gòu)布局。不免俗,咱也這么實現(xiàn)定義左側(cè)導(dǎo)航菜單新建采用的組件構(gòu)建一個導(dǎo)航菜單為了顯示圖標,引入字體圖標,在引入引入定義導(dǎo)航菜單數(shù)據(jù)功能菜單展開節(jié)點。

extjs-mvc結(jié)構(gòu)實踐(三):完善基本頁面2
一般經(jīng)典的后臺管理系統(tǒng),都是左側(cè)菜單右側(cè)tabs結(jié)構(gòu)布局。不免俗,咱也這么實現(xiàn)!
定義左側(cè)導(dǎo)航菜單

新建:app/luter/view/main/Navlist.js


/**
 * 采用extjs6的list tree組件構(gòu)建一個導(dǎo)航菜單
 */
Ext.define("luter.view.main.Navlist", {
    extend: "Ext.list.Tree",
    alias: "widget.navlist",
    width: 240,
    minWidth: 120,
    frame: true,
    border: true,
    split: true,
    expanderFirst: false,
    expanderOnly: false,
    highlightPath: true,
    itemId: "navigationTreeList",
    ui: "navigation",
    store: "NavTreeStore",
    initComponent: function () {
        this.callParent(arguments);
    }
});


為了顯示icon圖標,引入font awsome字體圖標,在app.html引入:

  
    
定義導(dǎo)航菜單數(shù)據(jù)Store:app/luter/store/NavTreeStore.js
Ext.define("luter.store.NavTreeStore", {
    extend: "Ext.data.TreeStore",
    fields: ["id", "text", "leaf", "module", "tips", "icon"],
    autoLoad: true,
    proxy: {
        type: "ajax",
        url: "app/testdata/menu.json",
        reader: {
            type: "json",
            root: "children",
            successProperty: "success"
        },

        actionMethods: {
            read: "GET"
        },
        listeners: {
            exception: function (proxy, response, operation, eOpts) {
                DealAjaxResponse(response);
            }
        }
    },
    root: {
        text: "功能菜單",
        id: 0,
        leaf: false,
        expanded: false
    },

    listeners: {
        beforeload: function (store, operation, eOpts) {
            if (store.isLoading()) return false;
        },

        nodeappend: function (me, node, index, eOpts) {
            //展開節(jié)點。
            if (!node.isRoot() && !node.get("leaf")) {
                node.set("expanded", true);
            }

        }
    }
});
/**
 * 解決問題:主要是因為RootTreeItem引起
 * ext-all.js?v=20000000:22 Uncaught TypeError: b.getFloated is not a function
 */

Ext.define("Overrides.list.RootTreeItem", {
    override: "Ext.list.RootTreeItem",
    config: {
        floated: null
    },
    setFloated: function (floated) {
        var me = this,
            el = me.element,
            placeholder = me.placeholder,
            node, wasExpanded;
        if (me.treeItemFloated !== floated) {
            if (floated) {
                placeholder = el.clone(false, true);
                placeholder.id += "-placeholder";
                me.placeholder = Ext.get(placeholder);
                me.wasExpanded = me.getExpanded();
                me.setExpanded(true);
                el.addCls(me.floatedCls);
                el.dom.parentNode.insertBefore(placeholder, el.dom);
                me.floater = me.createFloater();
            }
            else if (placeholder) {
                wasExpanded = me.wasExpanded;
                node = me.getNode();
                me.setExpanded(wasExpanded);
                if (!wasExpanded && node.isExpanded()) {
                    me.preventAnimation = true;
                    node.collapse();
                    me.preventAnimation = false;
                }
                me.floater.remove(me, false);
                el.removeCls(me.floatedCls);
                placeholder.dom.parentNode.insertBefore(el.dom, placeholder.dom);
                placeholder.destroy();
                me.floater.destroy();
                me.placeholder = me.floater = null;
            }
            me.treeItemFloated = floated;
        }
    },
    getFloated: function () {
        return this.treeItemFloated;
    },
    runAnimation: function (animation) {
        return this.itemContainer.addAnimation(animation);
    },
    stopAnimation: function (animation) {
        animation.jumpToEnd();
    },
    privates: {
        createFloater: function () {
            var me = this,
                owner = me.getOwner(),
                ownerTree = me.up("treelist"),
                floater,
                toolElement = me.getToolElement();
            me.floater = floater = new Ext.container.Container({
                cls: ownerTree.self.prototype.element.cls + " " + ownerTree.uiPrefix + ownerTree.getUi() + " " + Ext.baseCSSPrefix + "treelist-floater",
                floating: true,
                width: Ext.isIE8 ? 200 : (ownerTree.expandedWidth - toolElement.getWidth()),
                shadow: false,
                renderTo: Ext.getBody(),
                listeners: {
                    element: "el",
                    click: function (e) {
                        return owner.onClick(e);
                    }
                }
            });
            floater.add(me);
            floater.show();
            floater.el.alignTo(toolElement, "tr?");
            return floater;
        }
    }
});

寫點模擬菜單數(shù)據(jù):app/testdata/menu.json

[
  {
    "id": "111",
    "text": "系統(tǒng)管理",
    "href": null,
    "leaf": false,
    "iconCls": "fa fa-home",
    "module_id": "no sign",
    "qtip": "這個地方顯示鼠標懸停提示",
    "children": [
      {
        "id": "11111",
        "text": "用戶管理",
        "href": null,
        "leaf": true,
        "iconCls": "fa fa-user",
        "module_id": "sys.UserModule",
        "qtip": "系統(tǒng)用戶管理",
        "children": []
      },
    ]
  },
  {
    "id": "111",
    "text": "系統(tǒng)管理",
    "href": null,
    "leaf": false,
    "iconCls": "fa fa-home",
    "module_id": "no sign",
    "qtip": "這個地方顯示鼠標懸停提示",
    "children": [
      {
        "id": "11111",
        "text": "用戶管理",
        "href": null,
        "leaf": true,
        "iconCls": "fa fa-user",
        "module_id": "sys.UserModule",
        "qtip": "系統(tǒng)用戶管理",
        "children": []
      },
    ]
  }
  
]
定義中間視圖展示部分tabpanel:app/luter/view/main/ContentPanel.js
/*
 *系統(tǒng)主頁面TabPanel面板
 */
 Ext.define("luter.view.main.ContentPanel", {
    extend: "Ext.tab.Panel",
    alias: "widget.syscontentpanel",
    border: false,
    plugins: [Ext.create("luter.ux.TabCloseMenu", {//用到了一個tab右鍵關(guān)閉插件
        closeTabText: "關(guān)閉當(dāng)前頁",
        closeOthersTabsText: "關(guān)閉其他頁",
        closeAllTabsText: "關(guān)閉所有頁",
        closeIcon: +" fa fa-remove red-color",
        closeOtherIcon: " fa fa-remove red-color",
        closeAllIcon: "fa fa-remove red-color",
    })],
    items: [{
        xtype: "panel",
        id: "dashboardpanel",
        title: "DASHBOARD",
        baseCls: "home-body",
        closeable: false,
        glyph: 42
    }]

});

在viewport中引入導(dǎo)航樹和內(nèi)容區(qū)域,編輯:app/luter/view/main/Viewport.js,內(nèi)容如下:
/**
 * 主視圖占滿全屏是個viewport
 */
Ext.define("luter.view.main.ViewPort", {
    extend: "Ext.Viewport",
    alias: "widget.viewport",//別名,與xtype對應(yīng)
    layout: "border",//東南西北中布局,邊界嘛
    stores: [],
    //動態(tài)加載相關(guān)組件定義的js,相當(dāng)于java的:import com.xxx.*;
    requires: ["luter.view.main.Header", "luter.view.main.Footer", "luter.view.main.Navlist", "luter.view.main.ContentPanel"],
    initComponent: function () {
        var me = this;
        Ext.apply(me, {
            items: [{
                region: "north",
                xtype: "appheader"
            }, {
                region: "west",
                xtype: "navlist"http://引入導(dǎo)航菜單
            }, {
                region: "center",
                xtype: "syscontentpanel"http://引入內(nèi)容tabpanel

            }, {
                region: "south",
                xtype: "sysfooter"
            }]
        });
        me.callParent(arguments);
    }
});

最后,別忘記在主控制器里加入導(dǎo)航菜單的Store,

修改主控制器:app/luter/controller/MainController.js
Ext.define("luter.controller.MainController", {
    extend: "Ext.app.Controller",
    views: ["main.ViewPort"],
    stores: ["NavTreeStore"],//引入導(dǎo)航樹的Store
    init: function (application) {
        var me = this;
        this.control({
            "viewport": {//監(jiān)聽viewport的初始化事件,可以做點其他事情在這里,如有必要,記得viewport定義里的alias么?
                "beforerender": function () {
                    console.log("viewport begin render at:" + new Date());
                },
                "afterrender": function () {
                    console.log("viewport  render finished at:" + new Date());
                },
            }
        });
    }

});

現(xiàn)在,整個項目結(jié)構(gòu)應(yīng)該如圖:

打開app.html,界面應(yīng)該如圖:

下一篇,實現(xiàn)左側(cè)菜單點擊與內(nèi)容區(qū)域tabpanel聯(lián)動功能,并且實現(xiàn)控制器的動態(tài)加載。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/92700.html

相關(guān)文章

  • extjs-mvc結(jié)構(gòu)實踐():完善基本頁面

    摘要:上篇實現(xiàn)了基本的代碼架構(gòu),控制器動態(tài)加載功能以及一個基礎(chǔ)的頁面布局,本節(jié)開始,將陸續(xù)完善這個頁面。頁面底部區(qū)域,主要顯示版權(quán)信息等,也可以顯示個時間啥的。。。頭部和底部定義完畢后,需要在中引入對應(yīng)位置。 上篇實現(xiàn)了基本的代碼架構(gòu),控制器動態(tài)加載功能以及一個基礎(chǔ)的頁面布局,本節(jié)開始,將陸續(xù)完善這個頁面。 目標 如前所述,我們的頁面包含這么幾個區(qū)域: header: UI頂部區(qū)域,顯示系...

    zhkai 評論0 收藏0
  • extjs-mvc結(jié)構(gòu)實踐(二):基本頁面

    摘要:接著來,上一篇搭建了基本的項目骨架,到最后,其實啥也沒看見。。。目標全屏顯示左側(cè)導(dǎo)航菜單,右側(cè)標簽頁切換操作內(nèi)容區(qū)域。一般模型與你后臺返回的數(shù)據(jù)結(jié)構(gòu)一一對應(yīng)。給其他組件提供一致接口使用數(shù)據(jù)。整個構(gòu)成一個所謂的。 接著來,上一篇搭建了基本的項目骨架,到最后,其實啥也沒看見。。。書接上回,開始寫UI效果。 目標 全屏顯示、左側(cè)導(dǎo)航菜單,右側(cè)標簽頁切換操作內(nèi)容區(qū)域。包含header和foo...

    changfeng1050 評論0 收藏0
  • extjs-mvc結(jié)構(gòu)實踐(一):搭建基礎(chǔ)架構(gòu)

    摘要:今天開始,一點點記錄一下使用搭建一個基礎(chǔ)結(jié)構(gòu)的過程。沒辦法,記性差這種結(jié)構(gòu)的前端,主要是面向后臺信息管理系統(tǒng),可以最大限度的規(guī)范前端代碼結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)。 今天開始,一點點記錄一下使用extjs6.2.0搭建一個基礎(chǔ)MVC結(jié)構(gòu)的過程。沒辦法,記性差:)這種結(jié)構(gòu)的UI前端,主要是面向后臺信息管理系統(tǒng),可以最大限度的規(guī)范前端代碼結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)。做網(wǎng)站 或者手機端,這種方式全引入了extjs,...

    kamushin233 評論0 收藏0
  • extjs-mvc結(jié)構(gòu)實踐(四):導(dǎo)航菜單與控制器模塊聯(lián)動

    摘要:根據(jù)模塊創(chuàng)建模塊失敗。在中,我們配置了標明了這是一個控制器模塊,點擊后會去觸發(fā)控制器加載動作。正常情況下同一個模塊的只加載一次。 前面幾篇文檔,我們基本實現(xiàn)了一個靜態(tài)的extjs頁面,本篇開始,實現(xiàn)左側(cè)導(dǎo)航樹與右側(cè)內(nèi)容的聯(lián)動,也就是點擊導(dǎo)航菜單,加載對應(yīng)模塊頁面和業(yè)務(wù)邏輯,實現(xiàn)js文件的按需加載。 業(yè)務(wù)需求是這樣的: 左側(cè)的treelist,當(dāng)點擊某個節(jié)點的時候,系統(tǒng)根據(jù)tree數(shù)據(jù)里...

    figofuture 評論0 收藏0
  • extjs-mvc結(jié)構(gòu)實踐(五):實現(xiàn)用戶管理的增刪改查

    摘要:而且上一篇文章中,也已經(jīng)實現(xiàn)了一個基本的用戶管理列表頁面。接著上一篇,完善用戶管理,實現(xiàn)增刪改。為了用戶體驗,增加和修改用戶信息的表單,都放在彈窗中進行。 經(jīng)過前面幾篇文章的介紹,一個基本的MVC結(jié)構(gòu)應(yīng)該是具備了。而且上一篇文章中,也已經(jīng)實現(xiàn)了一個基本的用戶管理列表頁面。接著上一篇,完善用戶管理,實現(xiàn)增刪改。為了用戶體驗,增加和修改用戶信息的表單,都放在彈窗中進行。避免跳轉(zhuǎn)頁面。 定義...

    wendux 評論0 收藏0

發(fā)表評論

0條評論

X1nFLY

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<