• Ext Js MVC系列二 利用Application和Viewport进行应用程序初始化和页面布局


    通过上一篇我们已经对Ext js MVC框架开发有了一个大概的了解,这一篇将利用Application和Viewport进行应用程序的初始化和页面布局。我想从以下几方面来进行总结。

    1,通过Ext.Loader开启动态加载功能
    2,利用Application对象创建应用程序实例
    3,利用Viewport和view进行页面布局

    通过Ext.Loader开启动态加载功能

    通过Loader对象我们可以开启动态加载的依赖加载功能,我们一般通过它的setConfig方法开启动态加载,通过setPath设置加载路径,然后通过Ext.require方法加载相关类库。代码如下。

    /**
    开启动态加载的依赖加载功能和设置插件的路径,并加载相关类库
    **/
    Ext.Loader.setConfig({ enabled: true });//开启动态加载的依赖加载功能,默认为false不开启
    Ext.Loader.setPath('Ext.ux', '/Scripts/ux');//设置命名空间"Ext.ux"的路径
    Ext.require(['Ext.ux.CheckColumn', //加载相关类库和它的直接依赖
        'Ext.ux.grid.FiltersFeature',
        'Ext.ux.RowExpander',
        'Ext.ux.grid.SPrint']);

    利用Application对象创建应用程序实例

    通过Application对象我们可以创建应用程序的实例,作为应用程序的单一入口。在Application中我们可以设置全局命名空间,应用程序路径,是否开启自动创建视口,和加载相关controller。代码如下。

    /**
    创建应用程序的实例
    **/
    Ext.application({
        name: 'MyExt', //设定应用程序的命名空间(它将是controller,view.model和store的命名空间)
        appFolder: 'app', //设定应用程序的路径
        autoCreateViewport: true,//开启自动创建Viewport,它将自动去view目录下查找Viewport文件并实例化
        controllers: [ //加载应用程序所用到的所有controller
            'UserController']
    });

    利用Viewport和view进行页面布局

    一个页面只能有一个Viewport,它就像骨架一样承载着多个view(这里指的上,下,左,右的panel),它是应用程序界面的载体。下面是创建Viewport视口的代码。

    /***
    *自定义一个Viewport类继承Ext.container.Viewport
    ***/
    
    Ext.define('MyExt.view.Viewport', {
        extend: 'Ext.container.Viewport',
        alias: 'widget.viewport',
    
        //在实例化前加载相关类,一定要先加载,否则在构造函数initComponent中无法使用
        requires: [
            'MyExt.view.main.Top',
            'MyExt.view.main.Bottom',
            'MyExt.view.main.Left',
            'MyExt.view.main.Content'
        ],
        layout: 'border',
    
        //构造函数
        initComponent: function () {
            var me = this;
            Ext.applyIf(me,
             {
                //将上,下,左,右四个面板作为独立的view进行实例化,然后作为item给Viewport
                 items: [
                    Ext.create('MyExt.view.main.Top'),
                    Ext.create('MyExt.view.main.Bottom'),
                    Ext.create('MyExt.view.main.Left'),
                    Ext.create('MyExt.view.main.Content')
                ]
             });
             me.callParent(arguments); //确保父类Ext.container.Viewport的构造函数能被调用
        }
    });

    这个是Top面板的代码,其它三个面板都是一样,作为一个独立的view,需要的时候再实例化,这样就达到了view复用的目的。

    /***
    *自定义一个Panel类继承Ext.Panel
    ***/
    Ext.define('MyExt.view.main.Top', {
        extend: 'Ext.Panel',
        alias: 'widget.top',
    
        initComponent: function () {
            var me = this;
            Ext.apply(this, {
                region: 'north',
                title: 'top',
                height: 100,
                layout:'border',
                html:'this is north panel'
            });
            me.callParent(arguments);
        }
    });

    Bottom面板

    /***
    *自定义一个Panel类继承Ext.Panel
    ***/
    Ext.define('MyExt.view.main.Bottom', {
        extend: 'Ext.Panel',
        alias: 'widget.bottom',
    
        initComponent: function () {
            var me = this;
            Ext.apply(this, {
                region: 'south',
                title: 'south',
                height: 100,
                layout: 'border',
                html: 'this is south panel'
            });
            me.callParent(arguments);
        }
    });

    Left面板

    /***
    *自定义一个Panel类继承Ext.Panel
    ***/
    Ext.define('MyExt.view.main.Left', {
        extend: 'Ext.Panel',
        alias: 'widget.left',
    
        initComponent: function () {
            var me = this;
            Ext.apply(this, {
                region: 'west',
                title: 'west',
                 200,
                layout: 'border',
                html: 'this is west panel'
            });
            me.callParent(arguments);
        }
    });

    Content面板

    /***
    *自定义一个Panel类继承Ext.Panel
    ***/
    Ext.define('MyExt.view.main.Content', {
        extend: 'Ext.Panel',
        alias: 'widget.content',
    
        initComponent: function () {
            var me = this;
            Ext.apply(this, {
                region: 'center',
                title:'center',
                layout: 'fit',
                html: 'this is center panel'
            });
            me.callParent(arguments);
        }
    });

    运行效果如图。

    ext04

    这样页面的布局就算完成了,这里我们已经对view有一个初步的认识,它其实就是利用窗体控件panel,grid或form等进行用户界面展示,我们最好将每一个view都定义成一个独立的类,这样需要使用的时候去实例化就好了,这样达到了view复用的目的。下一篇我将总结如何利用view,store和model创建组件和数据交互。

  • 相关阅读:
    访问静态文件时, 为NetCore项目添加MIME类型支持
    Ant design pro formItem validator报警告 `callback` is deprecated. Please return a promise instead.
    .NET Core 自定义过滤器 AllowAnonymous 失效问题
    前端获取二进制流下载文件并解决无法获header问题,Content-Disposition
    cefSharp通过js操控页面,含跨域操控
    C#中Application.StartupPath和System.Environment.CurrentDirectory的区别
    C# XML配置文件读写类(用于程序配置保存)
    C#爬虫使用代理刷文章浏览量
    c#批量抓取免费代理并验证有效性
    C# 代理HTTP请求
  • 原文地址:https://www.cnblogs.com/mcgrady/p/3119982.html
Copyright © 2020-2023  润新知