ExtJS 6 如何引入Dashboard模版

最近很多人问我在ext js 6+的版本中怎么引入官方的dashboard模版,正好我好久没写博客了,这里我写一篇博客来说明一下。

在这里以ext js 6.2.1版本为例(注:需要安装Sencha Cmd,以及下载对应的sdk)

1.创建空白项目

在命令行中输入sencha -sdk D:\ASPX\ext-6.2.1 generate app --classic app D:\ASPX\Test

D:\ASPX\ext-6.2.1 是指sdk目录

generate app --classic app 是创建pc端应用,这个应用的包名是app

D:\ASPX\Test 就是所创建项目的目录了

运行一下项目,效果是这样的,这并不是我们想要的模版

2.移植模版

a.打开你所创建的项目,打开app目录

删掉里面所有的文件

b.找到sdk所在目录,依次打开templates->admin-dashboard->app目录

将app目录里面的文件全部复制并替换到你创建项目的app目录中,在这里是指D:\ASPX\Test\app

返回到sdk所在目录,依次打开templates->admin-dashboard->classic->src目录

同样的将这里面的文件全部复制并替换到你创建项目的app目录中,在这里是指D:\ASPX\Test\app

c.打开你创建项目目录中的app.js文件,修改成以下内容

Ext.application({
    name: 'app',
    extend: 'app.Application',
});

打开你创建项目的app目录中的Application.js文件

注意这里的项目包名是Admin,而我们自己创建的包名是app,所以我们需要对代码进行一些修改才可以使用

Ext.define('app.Application', {
    extend: 'Ext.app.Application',
    name: 'app',
    stores: [
        'NavigationTree'
    ],
    defaultToken: 'dashboard',
    mainView: 'app.view.main.Main',
    requires: ['app.*'],
    onAppUpdate: function () {
        Ext.Msg.confirm('Application Update', 'This application has an update, reload?',
            function (choice) {
                if (choice === 'yes') {
                    window.location.reload();
                }
            }
        );
    }
});

用编辑器自带的工具把app目录下所有js文件中的Admin.包名替换为app. 注意别替换错了。在这里因为我们的项目名称是app所以才替换为app

你自己创建的项目名称是什么替换为对应的名称即可

d.返回到sdk所在目录,依次打开templates->admin-dashboard->resources目录

将这里面的文件全部复制到你创建项目的resources目录中,在这里是指D:\ASPX\Test\resources

f.返回到sdk所在目录,依次打开templates->admin-dashboard->sass目录

将这里面的etc,src,var三个文件夹全部复制并替换到你创建项目的sass目录中,在这里是指D:\ASPX\Test\sass

返回到sdk所在目录,依次打开templates->admin-dashboard->classic->sass目录

将这里面的etc,src,var三个文件夹全部复制并替换到你创建项目的sass目录中,在这里是指D:\ASPX\Test\sass

g.返回到sdk所在目录,依次打开templates->admin-dashboard->overrides目录

将这里面的文件全部复制到你创建项目的overrides目录中,在这里是指D:\ASPX\Test\overrides

h.找到你创建项目中app.json文件,找到requires配置,修改为如下配置

    "requires": [
        "charts",
        "font-awesome",
        "ux"
    ]

3.编译

打开cmd,进入你所创建的项目目录中,这里是指D:\ASPX\Test目录,运行sencha app build命令打包

运行一下项目,这就是我们想要的效果(注:我没有放到服务器中运行,所以看不到具体数据)

4.自定义模版


我们看一下项目结构,简单介绍一下各个目录的作用

app目录---------------项目文件目录

  data目录------------数据源目录

     model目录-----------模型目录

     proxy目录------------自定义代理目录

     store目录-------------数据仓库目录

     view目录-------------视图目录

overrides目录---------重写类目录

resources目录--------资源文件目录

sass目录--------------sass样式目录

app.js----------------项目入口文件

app.json-------------项目配置文件


这里我们重点关注app下的view目录与sass目录,目录结构对比如下

以Dialog视图为例,在sass目中下src,var目录下都生成了对应的sass文件

src里面是具体sass样式

.auth-dialog{

    .auth-profile-wrap{
        background:$base-color;
        color:$lightest-color;
        line-height:24px;
        .user-name-text{
            font-size: 18px;
            font-weight:bold;
        }
        .user-post-text{
            font-size:14px;
        }
        .auth-profile-img{
            @include border-radius($circle-border-radius);
        }
    }
    
    .x-form-text-default, .x-placeholder-label-default {
        padding: 15px;
    }


    .register-page-back-button,
    .register-page-back-button .x-frame-mc{
        background-color: $lightest-color;
        border:none;
        padding:5px 0 0 0;
        .x-btn-inner-default-small{
            padding : 0;
            height:20px;
            color: $base-color;
            &:hover{
                text-decoration:underline;
            }
        }
        &.x-btn-pressed.x-btn-default-small{
            background-color: transparent;
        }
    }
    .trigger-glyph-noop {
        cursor:default;
    }
    .x-form-trigger{
        text-align:right;
        width:50px;
    }
    .password-trigger,
    .auth-email-trigger,
    .auth-password-trigger,
    .auth-envelope-trigger{
        &:before{
            top: 10px;
            left:-18px;
            position: relative;
            color: $dialog-trigger-color;
            font-size: 30px;
        }

        &.password-trigger:before,
        &.auth-password-trigger:before{
            content: "\f023";
        }
        &.auth-email-trigger:before{
            content: "\f007";
        }
        &.auth-envelope-trigger:before{
            content: "\f0e0";
        }
    }
    .seperator{
        text-align: center;
        color: $create-account-background-color;
        font-family: "Open Sans";
        display: inline-block;
        background: $lightest-color;
        position: relative;
        z-index: 1;
        padding: 0 8px;
    }
    .link-forgot-password {
        line-height:32px;
        color: $base-color;
        text-decoration:none;
        margin-left:5px;
        &:hover{
            text-decoration:underline;
        }
    }

    .x-btn{
        .x-btn-icon-el{
            &:before{
                right: 10px;
                font-size: 24px;
                position: absolute;
            }
        }
    }

    .auth-facebook-button .x-fa{
        color: $lightest-color;
        font-size: 24px;
        top:10px;
        right: 13px;
    }

    .auth-login-button .x-fa,
    .auth-resetpassword-button .x-fa{
        font-size: 32px;
        right: 11px;
        top:10px;
        line-height: 16px;
    }
    .auth-create-account-button .x-fa {
        color: $lightest-color;
        right: 24px;
        top:10px;
    }

    .outer-div{
        width:100%;
        text-align: center;
        &:after{
            content: " ";
            width:100%;
            height: 1px;
            background-color: $blank-page-color;
            position:absolute;
            left: 0;
            top: 9px;
        }
    }
}

var里面是sass变量

$dialog-login-background-color: #83c748;
$create-account-background-color: #a1a1a2;
$dialog-trigger-color: #e5e5e5;

我们需要某个页面的样式,只需要用同样的规则建立对应的sass配置即可,这里篇幅有限就不细讲了。(注别忘了all.scss,这里面有一些公用sass

作者:魔狼再世
原文:http://www.cnblogs.com/mlzs/p/6789425.html