本文地址:http://blog.csdn.net/sushengmiyan/article/details/38815923

实例代码下载地址: 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运行。

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

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

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/39252805 官方例子:http://docs.sencha.com/extjs/5. ...

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

    本文地址: http://blog.csdn.net/sushengmiyan/article/details/38479079 本文作者:sushengmiyan ----------------- ...

  3. 苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转

    昨天下午,测试提了一个bug,问题是:在苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转. 思前想后找了半天没思路,后来经过同事的点拨,说可能是禁用了cookie之类的,反正我也没思路就顺 ...

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

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38331347 本文作者:sushengmiyan ------------------ ...

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

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/39102335 官方例子:http://dev.sencha.com/ext/5.0.1 ...

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

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38458411本文作者:sushengmiyan-------------------- ...

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

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38458411本文作者:sushengmiyan-------------------- ...

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

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38612721 本文作者:sushengmiyan ------------------ ...

  9. [ExtJS5学习笔记]第二十节 Extjs5配合数组的push方法,动态创建并加载组件

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/39226773 官方例子:http://docs.sencha.com/extjs/5. ...

随机推荐

  1. 51nod 1770 数数字

    1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题  收藏  关注 统计一下 aaa ⋯ aaan个a × b 的结果里面 ...

  2. bzoj4447[Scoi2015]小凸解密码

    4447: [Scoi2015]小凸解密码 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 150  Solved: 58[Submit][Status ...

  3. 例 7-10 uva12212(迭代加深搜索)

    题意:对于一段数字,每次可以剪切一段连续的自然数,粘贴到任意部分,使其变成升序 思路: 考虑的是进行搜索,深搜并不能保证是最短,广搜感觉每层的情况太多. 迭代加深:枚举搜索深度,然后进行深搜. 这种方 ...

  4. bzoj3038上帝造题的七分钟2

    3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1679  Solved: 713[Submit][Status][Dis ...

  5. Spring源码分析(一)--BeanProcessor

    一.何谓BeanProcessor BeanProcessor是SpringFramework里非常重要的核心接口之一,我先贴出一段源代码: /* * Copyright 2002-2015 the ...

  6. django rest-framework 1.序列化 二

    在上一节说了Serializers的使用类似Django的From,在Django中有From也有ModelFrom,Serializers也是有个ModelSerializers,下面在讲讲rest ...

  7. Python【第五课】迭代器,生成器,数据序列化

    本节内容 列表生成式,生成器,迭代器 Json & pickle 数据序列化 1.列表生成式,生成器,迭代器 1.1 列表生成式 列表生成式?不就是生成个列表的表达式,恩~~~ 差不多. 一般 ...

  8. 腾讯北京SNG一面

    写在前面 面试官超nice,以一种聊天的形式跟你交流.上午10点10左右开始,11点40结束.总的来说,基础还可以,但是有些东西的底层学的还是不够深. 问题回忆 自我介绍 怎么平衡科研与项目开发之间的 ...

  9. 前端工程师:电信专业转前端是如何拿到阿里、腾讯offer的?

    1.个人情况 ● 211本科 985硕士 电信专业 女生 ● 16年3月开始学习前端 ● 16年7月开始实习,共五家实习经历(不是特别厉害的厂) ● 秋招拿到两个offer(阿里.腾讯).没错只有这两 ...

  10. 实验:利用ASMLib创建ASM磁盘

    环境:RHEL 6.5 + Oracle 11.2.0.4 RAC(2 nodes) 目的:在实验环境使用ASMLib配置共享ASM磁盘,虽然我们已经不建议使用ASMLib进行绑盘,但是无奈有客户是这 ...