[ExtJS5学习笔记]第十一节 Extjs5MVVM模式下系统登录实例

实例代码下载地址: http://download.csdn.net/detail/sushengmiyan/7817549

本文作者:sushengmiyan

------------------------------------------------------------------------------------------------------------------------------------

暂时完成效果图如下:

1.登录界面

输入任意用户名与密码(暂时没有设置登录验证等,后期添加),点击用户登录进入主页面

在左下角,显示了你刚才输入的用户名,实现了数据的传输。

代码模块展示如下:

app.js

/*
 * This file is generated and updated by Sencha Cmd. You can edit this file as
 * needed for your application, but these edits will have to be merged by
 * Sencha Cmd when upgrading.
 */
Ext.application({
    name: 'oaSystem',

    extend: 'oaSystem.Application',

    //autoCreateViewport: 'oaSystem.view.main.Main',

    //-------------------------------------------------------------------------
    // Most customizations should be made to oaSystem.Application. If you need to
    // customize this file, doing so below this section reduces the likelihood
    // of merge conflicts when upgrading to new versions of Sencha Cmd.
    //-------------------------------------------------------------------------

});

application.js

/**
 * The main application class. An instance of this class is created by app.js when it calls
 * Ext.application(). This is the ideal place to handle application launch and initialization
 * details.
 */
Ext.define('oaSystem.Application', {
    extend: 'Ext.app.Application',

    name: 'oaSystem',
    uses:['oaSystem.SimData', 'Ext.ux.ajax.*'],
    views: [
        // TODO: add views here
    ],

    controllers: [
        'Root'
        // TODO: add controllers here
    ],

    stores: [
        // TODO: add stores here
    ],

    launch: function () {
        // TODO - Launch the application
		//服务器傀儡,模拟真实世界中服务器交换
		//oaSystem.SimData.init();
		//console.log('launch begin');
		//this.callParent()
		Ext.ux.ajax.SimManager.init().register({
		  '/authenticate':
		  {
			type: 'json',
			data: function(ctx){
			  return Ext.apply({}, true);
			}
		  }
		});
    }
});

login.js

Ext.define(
  'oaSystem.view.login.Login',
  {
	requires:['oaSystem.view.login.LoginController'],
    extend: 'Ext.window.Window',
    controller: 'login',
	closable: false,
	resizable : false,
	modal: true,
	//draggable: false,
	autoShow: true,
	title: '用户登录---OA办公系统',
	glyph: 'xf007@FontAwesome',
	items:[{
		xtype:'form',//父窗体
		reference: 'form',
		bodyPadding: 20,
		items:[{
			xtype: 'textfield',
			name: 'username',
			labelWidth: 50,
		    fieldLabel: '用户名',
			allowBlank: false,
			emptyText: '用户名或邮箱地址'
		  },{
			xtype: 'textfield',
			name: 'password',
			labelWidth: 50,
			inputType: 'password',
		    fieldLabel: '密  码',
			allowBlank: false,
			emptyText: '请输入您的密码'
		  }]
	}],
    buttons: [{
			    name: 'registbutton',
			    text: '用户注册',
				glyph: 'xf118@FontAwesome'
			  },{
			    name: 'loginbutton',
			    text: '用户登录',
				glyph: 'xf110@FontAwesome',
				region: 'center',
				listeners:{
				  click: 'onLoginbtnClick'//单击事件 调用LoginConroller.js中的onLoginbtnClick函数
				}
			  }]
  }
);

logincontroller.js

Ext.define(
  'oaSystem.view.login.LoginController',
  {
    extend: 'Ext.app.ViewController',
    alias: 'controller.login',

   //用户登录按钮事件处理
   onLoginbtnClick: function(){
        var form = this.lookupReference('form');
		if (form.isValid()) {
		  this.login({
			data: form.getValues(),
			scope: this,
			success: 'onLoginSuccess',
			failure: 'onLoginFailure'
		})}
    },

    onLoginFailure: function() {
        // Do something
        Ext.getBody().unmask();
    },

    onLoginSuccess: function(logname, logpass) {
		console.log('登录成功,用户名: ' + logname);
		console.log('登录成功,密  码: ' + logpass);
        this.fireViewEvent('login', logname);
        //var org = this.lookupReference('organization').getSelectedRecord();
       // this.fireViewEvent('login', this.getView(), user, org, this.loginManager);
    },

    login: function(options) {
        Ext.Ajax.request({
            url: '/authenticate',
            method: 'GET',
            params: options.data,
            scope: this,
            callback: this.onLoginReturn,
            original: options
        });
    },
/**
    applyModel: function(model) {
        return model && Ext.data.schema.Schema.lookupEntity(model);
    },
*/
    onLoginReturn: function(options, success, response) {
        options = options.original;
        //var session = this.getSession(),
        //    resultSet;

        if (success) {
			console.log('log in success');
			/**
            resultSet = this.getModel().getProxy().getReader().read(response, {
                recordCreator: session ? session.recordCreator : null
            });

            if (resultSet.getSuccess()) {
                Ext.callback(options.success, options.scope, [resultSet.getRecords()[0]]);
				/*/
				console.log(response);
				Ext.callback(options.success, options.scope, [options.data.username, options.data.password]);
                return;
            //}
        }

        //Ext.callback(options.failure, options.scope, [response, resultSet]);
    }
  }
);

main.js

Ext.define(
  'oaSystem.view.main.Main',
  {
	  extend: 'Ext.container.Viewport',
	  uses:['oaSystem.view.main.region.Top', 'oaSystem.view.main.region.Bottom'],
	  layout: { type: 'border' },
	  viewModel: { type: 'main' },
	  items: [{
			 xtype: 'maintop',
			 region: 'north'
		  },
		  {
			 xtype: 'mainbottom',
			 region: 'south',
			 bind: '你好,{currentUser}'
		  },
		  {
		    xtype: 'panel'
	      }],

	  initComponent: function(){
	  //设置图标文件,设置后可以使用glyph属性
	    Ext.setGlyphFontFamily('FontAwesome');
	    this.callParent();
	  }
  }

);

root.js

/**
 * The main application controller. This is a good place to handle things like routes.
 * 这是主程序的控制器,这里适合做类似路由转发这样的事情
 */
Ext.define('oaSystem.controller.Root',
	{
      extend: 'Ext.app.Controller',
      uses: ['oaSystem.view.login.Login','oaSystem.view.main.Main'],
    /**
     * 初始化事件
     */
	  onLaunch: function () {
	    var session = this.session = new Ext.data.Session();
	    if (Ext.isIE8) {
		  Ext.Msg.alert('亲,本例子不支持IE8哟');
		  return;
	    };

	    this.login = new oaSystem.view.login.Login({
            session: session,
            listeners: {
                scope: this,
                login: 'onLogin'
            }});
	  },
    /**
     * logincontroller 的 "login" 事件回调.
     * @param user
     * @param loginManager
     */
    onLogin: function (username, loginController) {
        this.login.destroy();
		this.user = username;
		console.log('username: ' + username);
		this.showUI();
    },

    showUI: function(){

	  console.log('show ui started');
	  //显示主界面
	  this.viewport =  new oaSystem.view.main.Main(
		  {   //用户信息传入视图
		      viewModel: {
              data:
			    {
                    currentUser: this.user
                }
              }
		  }
	  );
	}
  });

实例代码打包下载地址:http://download.csdn.net/detail/sushengmiyan/7817549
使用方法:

1.第一步:使用sencha cmd 创建项目 名称需要注意 输入为oaSystem
   我使用的命令如下:sencha -sdk  E:\openSrc\ext-5.0.0 generate app oaSystem E:\workspaces\myeclipse2014\csdn
如果不太清楚sencha cmd的命令参数,建议先阅读 http://blog.csdn.net/sushengmiyan/article/details/38313537

2.第二步:使用sencha app build 命令构建应用程序,使用sencha web start 测试是否成功。
建议先阅读:http://blog.csdn.net/sushengmiyan/article/details/38331347

3.将刚才新建目录下的app文件夹全部删除,将下载的压缩文件解压缩,直接解压缩到项目目录即可,重新build运行。

时间: 2024-09-25 19:39:43

[ExtJS5学习笔记]第十一节 Extjs5MVVM模式下系统登录实例的相关文章

[ExtJS5学习笔记]第二十一节 Extjs5中使用config配置给ext.widget或者create方法传递参数

官方例子: http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.Class-cfg-config 本文作者:sushengmiyan ------------------------------------------------------------------------------------------------------------------------------------ 对于Extjs5的使用方式,我习惯性的是,先使用

[ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试

本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站:    http://www.sencha.com/products/extjs/up-and-running/the-class-system -

[ExtJS5学习笔记]第四节 欢迎来到extjs5-手把手教你实现你的第一个应用

本文作者:sushengmiyan ------------------------------------------------------------------------------------------------------------------- 翻译来源:http://docs.sencha.com/extjs/5.0.0/getting_started/welcome_to_extjs.html --------------------------------------

[ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用增加字体图标

本文作者:sushengmiyan -------------------------------------------------资源链接-------------------------------------------------------- FontAwesome glyph编码:http://fortawesome.github.io/Font-Awesome/cheatsheet/ 使用图标美化按钮: http://blog.csdn.net/jfok/article/deta

[ExtJS5学习笔记]第十七节 Extjs5的panel组件增加accodion成为折叠导航栏

官方例子: http://dev.sencha.com/ext/5.0.1/examples/window/layout.html?theme=neptune 本文作者:sushengmiyan ------------------------------------------------------------------------------------------------------------------------------------ 做一个系统的话,一般都需要有导航栏啊,

[ExtJS5学习笔记]第十节 Extjs5新增特性之ViewModel和DataBinding

本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源:http://docs.sencha.com/extjs/5.0/application_architecture/view_models_data_binding.html AP

[ExtJS5学习笔记]第七节 Extjs5的组件components及其模板事件方法学习

本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站:  http://www.sencha.com/products/extjs/up-and-running/concepts-components/

Mysql学习笔记(十一)临时表+视图

原文:Mysql学习笔记(十一)临时表+视图 学习内容: 临时表和视图的基本操作... 临时表与视图的使用范围... 1.临时表   临时表:临时表,想必大家都知道这个概念的存在...但是我们什么时候应该使用到临时表呢?当一个数据库存在着大量的数据的时候,我们想要获取到这个数据集合的一个子集,那么我们就可以使用临时表来保存我们想要的数据..然后对临时表进行操作就可以了...使用临时表必然是有原因的..使用临时表会加快数据库的查询性能.... create temporary table tmp_

[ExtJS5学习笔记]第十四节 Extjs5中data数据源store和datapanel学习

sencha官方API: http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.grid.Panel-cfg-store 本文作者:sushengmiyan ------------------------------------------------------------------------------------------------------------------------------------ 表格是现在web应用中常见