Extjs框架总结

Extjs框架知识总结

概述

Ext是基于Web的富客户端框架,其完全是基于标准W3C技术构建的,使用到的都是HTML、CSS、DIV等相关技术。Extjs提供了大量已经封装好的可以直接使用的组件,上手容易。以下是基于Extjs框架整合的demo。

Extjs框架可分为五个部分:

  1. HTML页面:加载js插件,承载界面显示
  2. Controller.js:控制各个组件,以及实现事件监听
  3. View.js:实现页面的布局
  4. Store.js:提供数据信息,可以通过代理向后台获取表单数据
  5. Model.js:数据保存模块,用于保存Store获取的数据

以下是各个模块实现是代码示例:
HTML页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Extjs示例</title>
    <link href="ext-4.2/resources/css/ext-all-gray.css" rel="stylesheet"/>
    <link href="resources/css/icon.css" rel="stylesheet"/>
    <script src="ext-4.2/ext-all.js"></script>
    <script src="ext-4.2/locale/ext-lang-zh_CN.js"></script>
    <script src="common.js"></script>
    <style type="text/css">
        .photo_css1 {
            height: 18px;
            width: 66px;
            cursor: pointer;
        }

        .photo_css2 {
            display: none;
        }
    </style>
</head>
<body>

</body>
<script>
    Ext.application({
        name: 'Cnu',
        controllers: ['Cnu.controller.CheckSummaryController'],
        launch: function () {
            Ext.create('Ext.container.Viewport', {
                layout: 'fit',
                items: [{
                    xtype: 'CheckSummaryView'
                }]
            });
        }
    });
</script>
</html>

Controller.js

Ext.define("Cnu.controller.CheckSummaryController", {
    extend: 'Ext.app.Controller',
    views: ['demo.CheckSummaryView'],
    models: ['demo.CheckSummaryModel'],
    stores: ['demo.CheckSummaryStore'],
    refs: [
        {
            ref: 'CheckSummaryView',
            selector: 'CheckSummaryView'
        }
    ],
    init: function () {
        this.control({
            'CheckSummaryView button': {
                click: this.btnEvent
            }
        });
    }
    ,
    btnEvent: function (selModel) {
        var grid = this.getCheckSummaryView();

        //var model = grid.getSelectionModel();
        if (selModel.iconCls == "icon-query") {//查询
            //点击搜索按钮将查询条件传递到后台
//          model.clearSelections();//清空所有选择 
            var jobId = Ext.getCmp('jobId').getValue();
            var startTime = Ext.util.Format.date(Ext.getCmp('startTime').getValue(), 'Y-m-d');
            var endTime = Ext.util.Format.date(Ext.getCmp('endTime').getValue(), 'Y-m-d');
            var deptType = Ext.getCmp('deptType').getValue();
            //store 加载之前将参数放进去以待后台获取
            grid.store.on('beforeload', function (store, options) {
                var new_params = {jobId: jobId, startTime: startTime, endTime: endTime,deptType: deptType};
                Ext.apply(store.proxy.extraParams, new_params);
            });
            grid.store.load();

        }
    }

});

View.js

Ext.define("Cnu.view.demo.CheckSummaryView", {
    extend: 'Ext.grid.Panel',
    xtype: 'CheckSummaryView',
    store: 'demo.CheckSummaryStore',
    initComponent: function () {
        //顶部工具栏 查询输入框
        this.tbar = [
            {
                xtype: 'label', text: '工号:'
            },
            {
                xtype: 'textfield', id: 'jobId',  emptyText: '请输入工号'
            },
            {
                id:'startTime',
                xtype : 'datefield',
                //anchor: '100%',
                name : 'startTime',
                //hiddenName : 'bdate',
                fieldLabel : '起始时间:',
                format: 'Y-m-d',
                allowBlank  : false,
                listeners: {
                    change: function () {
                        var e = Ext.util.Format.date(Ext.getCmp('endTime').getValue(), 'Y-m-d');//格式化日期控件值
                        var s = Ext.util.Format.date(Ext.getCmp('startTime').getValue(), 'Y-m-d');//格式化日期控件值
                        var end = new Date(e);
                        var start = new Date(s);
                        var today = new Date();
                        if(start.getTime()>today.getTime()){
                            Ext.Msg.alert("提示:","不可大于当前时间!");
                            Ext.getCmp('startTime').setValue(null);
                        }else if(end.getTime() < start.getTime()) {
                            Ext.Msg.alert("提示","结束时间必须大于开始时间!");
                            Ext.getCmp('startTime').setValue(null);
                        }else if((today.getTime()-start.getTime())/86400000>31){
                            Ext.Msg.alert("提示:","只能查询最近30天的数据!");
                            Ext.getCmp('startTime').setValue(null);
                        }

                    }
                },
                value: new Date()  // defaults to today

            },
            //{xtype:'spacer', width:100},

           {
                id:'endTime',
                xtype : 'datefield',
                //anchor: '100%',
                name : 'endTime',
                fieldLabel : '截止时间:',
                format: 'Y-m-d',
                allowBlank  : false,
                listeners: {
                    change: function () {

                        var e = Ext.util.Format.date(Ext.getCmp('endTime').getValue(), 'Y-m-d');//格式化日期控件值
                        var s = Ext.util.Format.date(Ext.getCmp('startTime').getValue(), 'Y-m-d');//格式化日期控件值
                        var end = new Date(e);
                        var start = new Date(s);
                        var today = new Date();
                        if(end.getTime()>today.getTime()){
                            Ext.Msg.alert("提示:","不可大于当前时间!");
                            Ext.getCmp('endTime').setValue(null);
                        }else if(end.getTime() < start.getTime()) {
                            Ext.Msg.alert("提示","结束时间必须大于开始时间!");
                            Ext.getCmp('endTime').setValue(null);
                        }else if((today.getTime()-end.getTime())/86400000>31){
                            Ext.Msg.alert("提示:","只能查询最近30天的数据!");
                            Ext.getCmp('endTime').setValue(null);
                        }


                    }
                },
                value: new Date()  // defaults to today

            },
            {
                id:'deptType',
                xtype: 'combobox',
                fieldLabel: '组织结构:',
                name: 'deptType',
                //hiddenName: 'STRATEGY_TYPE',
                store: Ext.create('Ext.data.Store', {
                    fields: ['DEPARTMENT', 'DEPARTMENT_DESC'],
                    autoLoad:true,
                    proxy: {
                        type: 'rest',
                        url: rest_prefix+'/checksummary/getDept',
                        reader: {
                            type: 'json',
                            root: 'DATA'
                        }
                    }
                }),
                valueField: 'DEPARTMENT',
                displayField: 'DEPARTMENT_DESC',
                typeAhead: true,
                queryMode: 'local',
                editable:false,
                allowBlank : false,
                triggerAction: 'all',
                emptyText: '请选择组织结构...'
            },
            {
                text: '查询',
                iconCls: 'icon-query'
            }
        ];
        this.columns = [
            {
                header: '工号',
                dataIndex: 'LOGIN_ID',
                flex: 1
            },
            {
                header: '姓名',
                dataIndex: 'LOGIN_NAME',
                flex: 1.2
            },
            {
                header: '签入已签出次数',
                dataIndex: 'LOGIN_NUM',
                flex: 2
            },
            {
                header: '签入已签出时长(小时)',
                dataIndex: 'LOGIN_TIME',
                flex: 1.1
            }
            ];
        this.callParent(arguments);
    },
    dockedItems: [
        {
            xtype: 'pagingtoolbar',
            store: 'demo.CheckSummaryStore',
            dock: 'bottom',
            displayInfo: true
        }
    ]
});

Store.js

Ext.define("Cnu.store.demo.CheckSummaryStore", {
    extend: 'Ext.data.Store',
    model: 'Cnu.model.demo.CheckSummaryModel',
    pageSize: '15',
    autoSync: true,
    autoLoad: false,
    remoteFilter: true,
    remoteSort: true,
    proxy: {
        type: 'rest',
        url: rest_prefix + '/checksummary/checksummarylist',
        //actionMethods: {
        //    read: 'POST'
        //},
        reader: {
            type: 'json',
            root: 'DATA',
            totalProperty: 'totalCount'
        },
        writer: {
            type: 'json'
        }
    },
    /*sorters: [{property: 'CREATE_TIME', direction: 'DESC'}],*/
    listeners: {
        'beforeload': function (store, op, options) {
            /*var params = {
                isUse: 0
            };
            Ext.apply(store.proxy.extraParams, params);*/
        }
    }
});

Model.js

Ext.define('Cnu.model.demo.CheckSummaryModel', {
    extend: 'Ext.data.Model',
    fields: [
        {
            name: 'LOGIN_ID'
        },
        {
            name: 'LOGIN_NAME'
        },
        {
            name: 'LOGIN_NUM'
        },
        {
            name: 'LOGIN_TIME'
        }

    ],

    idProperty: 'LOGIN_ID'
});

后台代理部分具体实现略

posted on 2016-07-21 17:39  baron_songjin  阅读(970)  评论(0)    收藏  举报

导航