热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

实例代码使用方法:1.第一步:使用senchacmd创建项目名称需要注意输入为oaSystem我使用的命令如下:sencha-sdkE:\openSrc\ext-5.0.0generateappoaSystemE:\workspaces\myeclipse2014\csdn如果不太清楚sen

本文地址:

本文作者: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运行。





推荐阅读
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 探讨了如何解决Ajax请求响应时间过长的问题。本文分析了一个从服务器获取少量数据的Ajax请求,尽管服务器已经对JSON响应进行了缓存,但实际响应时间仍然不稳定。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 本文详细介绍了如何利用Go语言和WebSockets技术构建一个高效的实时聊天系统。随着网络应用的日益复杂化,实时交互成为了提升用户体验的关键要素之一。通过本指南,开发者可以学习到最新的技术和最佳实践。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 本文详细介绍了在企业级项目中如何优化 Webpack 配置,特别是在 React 移动端项目中的最佳实践。涵盖资源压缩、代码分割、构建范围缩小、缓存机制以及性能优化等多个方面。 ... [详细]
author-avatar
goxtop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有