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

資訊專欄INFORMATION COLUMN

extjs-mvc結構實踐(二):基本頁面

changfeng1050 / 1605人閱讀

摘要:接著來,上一篇搭建了基本的項目骨架,到最后,其實啥也沒看見。。。目標全屏顯示左側(cè)導航菜單,右側(cè)標簽頁切換操作內(nèi)容區(qū)域。一般模型與你后臺返回的數(shù)據(jù)結構一一對應。給其他組件提供一致接口使用數(shù)據(jù)。整個構成一個所謂的。

接著來,上一篇搭建了基本的項目骨架,到最后,其實啥也沒看見。。。
書接上回,開始寫UI效果。
目標

全屏顯示、左側(cè)導航菜單,右側(cè)標簽頁切換操作內(nèi)容區(qū)域。包含header和footer

導航菜單動態(tài)ajax產(chǎn)生,點擊對應菜單可以動態(tài)加載js資源或者數(shù)據(jù)

不要太丑!!!!

先扯點概念:

一些基本的Extjs概念本文不會去講,請參考官網(wǎng)API文檔。
但是對于用java的同志來說,看extjs的結構應該是很容易的

定義與創(chuàng)建 define vs create

///////extjs
Ext.define("Cat",{//定義一只貓
name:"小甜甜"http://名字
})  
  
///////java
class Cat(){//定義一只貓
private String name;
}
///////extjs
Ext.create("Cat",{//創(chuàng)建一只貓
name:"牛夫人"http://
})  

///////java
Cat cat= new Cat();
cat.setName="牛夫人";

Model模型是個啥?

直白點說吧,模型就是模型,,就是實體類,就是entity,就是POJO,,,,就是.......
總之,模型是用來定義一個東西的屬性的。一般模型與你后臺返回的數(shù)據(jù)結構一一對應。
比如:一個用戶模型:

Ext.define("luter.model.User", {
    extend: "Ext.data.Model",
    fields: [
        {name: "id", type: "string"},//用戶id
        {name: "username", type: "string"},//用戶名
        {name: "gender", type: "string"},//性別
        {name: "real_name", type: "string"}//真實姓名
    ]
});

要模型干啥?哎,開始我也這么想過,后來看到store

Store是干啥的?

好了,你有數(shù)據(jù)庫,你有后臺,你甚至都用js定義了數(shù)據(jù)模型(Model),那你數(shù)據(jù)怎么來?
Store簡單理解,就是干這個的,Store用來獲取數(shù)據(jù),管理數(shù)據(jù),前端保存數(shù)據(jù)。給其他組件提供一致接口使用數(shù)據(jù)。Store定義了數(shù)據(jù)怎么獲取數(shù)據(jù)、拿到后如何處理數(shù)據(jù)。如下例:

//定義一個user store
Ext.define("luter.store.User", {
    extend: "Ext.data.Store",
    autoLoad: false,
    model: "luter.model.User",//這就是user model, 用戶模型
    pageSize: 15,//分頁頁面大小
    remoteSort: true,//服務端排序
    sortOnLoad: true,
    proxy: {//proxy規(guī)定了從什么地方以什么方式獲取數(shù)據(jù),并且返回數(shù)據(jù)應該如何解析獲取
        type: "ajax",
        actionMethods: {
            create: "POST",
            read: "POST",
            update: "POST",
            destroy: "POST"
        },
        api: {
            read: "app/testdata/user.json"
        },
        reader: {//返回數(shù)據(jù)如何讀取
            type: "json",
            root: "root",
            successProperty: "success",
            totalProperty: "total"
        },
        listeners: {//當發(fā)生ajax異常的時候,回調(diào)處理。
            exception: function (proxy, response, operation, eOpts) {
                DealAjaxResponse(response);
            }
        }
    },
    sorters: {//排序規(guī)則。
        property: "id",
        direction: "DESC"
    }

});


view是什么?

view就是。。。。。。UI啊!!!grid啊、button啊、panel啊、tree啊 form啊。。。等等。。。。
顯示數(shù)據(jù),接受用戶操作,給用戶操作反饋....反正用戶看到的地方,就是view

:>理解沒?

新建入口文件app.js
對于extjs而言,一個應用也就是application,對應Ext.Application類。一個應用可以有自己的類體系,store、view、Model等元素。整個構成一個所謂的:app。app.js是整個應用的入口,用來初始化Ext.Application,當然,你可以不叫app.js,比如叫:aipapa.js,都是可以滴!!但是里面是干這個事情的。。。
/**
 * 設置Extjs的動態(tài)加載路徑
 */
Ext.Loader.setConfig({
    enabled: true,
    paths: {
        "Ext": "app/vendor/extjs/6.2.0",
        "Ext.ux": "app/vendor/extjs/6.2.0/ux"
    }
});
/**
 * 是否開啟url緩存,就是xxx.com?_dc=123123123123類似這種
 */
Ext.Ajax.disableCaching = false;
/**
 * 初始化工具提示
 */
Ext.QuickTips.init();
Ext.application({
    name: "luter",//這個應用叫啥,其實就是目錄名字
    /**
     * 你把這個應用放哪個目錄下了,控制器啊store啊view啥的,在哪里?
     * 以后定義一個叫Ext.define("luter.model.Car",{})的時候,其實就是指向了js文件:app/luter/model/Car.js
     * requiere就會動態(tài) ajax load這個js下來
     */
    appFolder: "app/luter",
    init: function () {//先初始化
        console.log("init")
    }, launch: function () {//發(fā)射!
        console.log("launch")
    }
});

最后,在入口html中記得引入這個文件。不出意外的話預覽app.html,console里應該能看到點信息了,當然,依然沒啥UI效果....接下來就創(chuàng)建view

開始創(chuàng)建主view
主view基礎是一個viewport,采用Border布局,頭部header+底部footer+左側(cè)導航樹+中間tab頁內(nèi)容切換。為了方便管理,主view統(tǒng)一放在main目錄下,
主視窗: app/luter/view/main/viewport.js
 /**
 * 主視圖占滿全屏是個viewport
 */
Ext.define("luter.view.main.ViewPort", {
    extend: "Ext.Viewport",
    alias: "widget.viewport",//別名,與xtype對應
    layout: "border",//東南西北中布局,邊界嘛
    stores: [],
    requires: [],
    initComponent: function () {
        var me = this;
        Ext.apply(me, {
            items: [{
                region: "north",
                height: 40,
                title: "北方",
                xtype: "panel"
            }, {
                region: "west",
                xtype: "panel",
                title: "西方",
                width: 200
            }, {
                region: "center",
                title: "中間",
                xtype: "panel"

            }, {
                region: "south",
                xtype: "panel",
                title: "南方",
                height: 40
            }]
        });
        me.callParent(arguments);
    }
});
建立主控制器:app/luter/controller/MainController.js
Ext.define("luter.controller.MainController", {
    extend: "Ext.app.Controller",
    views: ["main.ViewPort"],//默認views會尋找項目目錄下的view目錄,也就是會掃描到app/luter/view了,所以直接下下級路徑即可。
    stores: [],
    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());

                },
            }
        });
    }

});

控制器有了,視圖有了,接下來讓程序顯示這個UI,修改app.js

修改app入口: app/luter/app.js
/**
 * 設置Extjs的動態(tài)加載路徑
 */
Ext.Loader.setConfig({
    enabled: true,
    paths: {
        "Ext": "app/vendor/extjs/6.0.0",
        "Ext.ux": "app/vendor/extjs/6.0.0/ux"
    }
});
/**
 * 是否開啟url緩存,就是xxx.com?_dc=123123123123類似這種
 */
Ext.Ajax.disableCaching = false;
/**
 * 初始化工具提示
 */
Ext.QuickTips.init();
var luterapp;//定義一個全局app對象,便于后續(xù)使用
Ext.application({
    name: "luter",//這個應用叫啥,其實就是目錄名字
    /**
     * 你把這個應用放哪個目錄下了,控制器啊store啊view啥的,在哪里?
     * 以后定義一個叫Ext.define("luter.model.Car",{})的時候,其實就是指向了js文件:app/luter/model/Car.js
     * requiere就會動態(tài) ajax load這個js下來
     */
    appFolder: "app/luter",
    init: function () {//先初始化
        console.log("init")
    }, launch: function () {//發(fā)射!
        console.log("launch")
        luterapp = this;
        this.loadModule({
            moduleId: "MainController"
        });
        var module = this.getController("MainController");//加載這個控制器
        var viewName = module.views[0];//獲取到這個控制器里的第一個view名字
        var view = module.getView(viewName);//獲取到這個view,本質(zhì)上就是加載js文件
        view.create();//創(chuàng)建這個view
    },
    /**
     * 動態(tài)加載控制器
     * @param config
     * @returns {boolean}
     */
    loadModule: function (config) {
        if (!Ext.ClassManager.isCreated(config.moduleId)) {
            console.log("controller:" + config.moduleId + "  is not load ,now load in.....");
            try {
                var module = luterapp.getController(config.moduleId);
            } catch (error) {
                showFailMesg({
                    msg: ":<> O!   No:load module fail,the module object is null." +
                    "
maybe :the module is Not available now." + "
Error: " + error }); return false; } finally { } } } });

這里面用到了一個showFailMesg的函數(shù),這種彈出提示框的東西,可以做成通用的函數(shù)放在utils里,后續(xù)這個工具類會逐漸完善。
如下:

通用函數(shù)工具類: app/luter/utils.js
/**
 * 操作成功提示
 */
function showSucMesg(config) {
    Ext.Msg.show({
        title: "成功",
        msg: config.msg || "",
        width: 400,
        buttons: Ext.Msg.OK,
        icon: Ext.MessageBox.INFO,
        fn: config.fn || ""
    });
}

/**
 * 操作失敗提示
 */
function showFailMesg(config) {
    Ext.Msg.show({
        title: config.title || "失敗",
        msg: config.msg || "",
        width: 450,
        buttons: Ext.Msg.OK,
        icon: Ext.MessageBox.ERROR,
        fn: config.fn || ""
    });
}

當然,這個js也需要在入口html引入,在app.js之前引入。如下:

修改入口html: app/app.html



    
    EXTJS6.2.0MVC
    
    
    
    
    
    
    











至此,沒什么意外的話,應該是可以看到界面了!

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

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

相關文章

  • extjs-mvc結構實踐(三):完善基本頁面

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

    zhkai 評論0 收藏0
  • extjs-mvc結構實踐(三):完善基本頁面2

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

    X1nFLY 評論0 收藏0
  • extjs-mvc結構實踐(一):搭建基礎架構

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

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

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

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

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

    wendux 評論0 收藏0

發(fā)表評論

0條評論

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