1.        用Sencha Cmd生成应用程序模版

sencha -sdk /path/to/ExtSDK generate app -classic TutorialApp./TutorialApp

2.        创建Login View组件

在./TutorialApp的“app/view/”目录下,有缺省的main目录,这个目录包括了文件Main.jsMainController.js,和 MainModel.js。

在“app/view/”目录下创建一个目录“login”,在“login”目录下,新建两个文件
Login.js和LoginController.js。

3.        从“{appRoot}/app.js”中移除mainView。

4.        创建Login窗体。文件 “{appRoot}/app/view/login/Login.js” 的内容例如以下:

Ext.define('TutorialApp.view.login.Login',{

extend: 'Ext.window.Window',

xtype: 'login',

requires: [

'TutorialApp.view.login.LoginController',

'Ext.form.Panel'

],

controller: 'login',

bodyPadding: 10,

title: 'Login Window',

closable: false,

autoShow: true,

items: {

xtype: 'form',

reference: 'form',

items: [{

xtype: 'textfield',

name: 'username',

fieldLabel: 'Username',

allowBlank: false

}, {

xtype: 'textfield',

name: 'password',

inputType: 'password',

fieldLabel: 'Password',

allowBlank: false

}, {

xtype: 'displayfield',

hideEmptyLabel: false,

value: 'Enter any non-blank password'

}],

buttons: [{

text: 'Login',

formBind: true,

listeners: {

click: 'onLoginClick'

}

}]

}

});

5.        添加Login逻辑,“{appRoot}/app/view/login/LoginController.js ”文件的内容例如以下:

Ext.define('TutorialApp.view.login.LoginController',{

extend: 'Ext.app.ViewController',

alias: 'controller.login',

onLoginClick: function() {

// This would be the ideal location to verify the user's credentials via

// a server-side lookup. We'll just move forward for the sake of thisexample.

// Set the localStorage value to true

localStorage.setItem("TutorialLoggedIn", true);

// Remove Login Window

this.getView().destroy();

// Add the main view to the viewport

Ext.create({

xtype: 'app-main'

});

}

});

6.        在Application.js中添加Launch逻辑。Application.js文件例如以下:

Ext.define('TutorialApp.Application', {

extend: 'Ext.app.Application',

name: 'TutorialApp',

stores: [

// TODO: add global / shared stores here

],

views: [

'TutorialApp.view.login.Login',

'TutorialApp.view.main.Main'

],

launch: function () {

// It's important to note that this type of application could use

// any type of storage, i.e., Cookies,LocalStorage, etc.

var loggedIn;

// Check to see the current value of the localStorage key

loggedIn = localStorage.getItem("TutorialLoggedIn");

// This ternary operator determines the value of the TutorialLoggedInkey.

// If TutorialLoggedIn isn't true, we display the login window,

// otherwise, we display the main view

Ext.create({

xtype: loggedIn ? 'app-main' : 'login'

});

},

onAppUpdate: function () {

Ext.Msg.confirm('Application Update', 'This application has an update,reload?

',

function (choice) {

if (choice === 'yes') {

window.location.reload();

}

}

);

}

});

7.        添加Viewport Plugin和Logoutbutton,“ {appRoot}/app/view/main/Main.js”文件例如以下:

Ext.define('TutorialApp.view.main.Main', {

extend: 'Ext.tab.Panel',

xtype: 'app-main',

requires: [

'Ext.plugin.Viewport',

'Ext.window.MessageBox',

'TutorialApp.view.main.MainController',

'TutorialApp.view.main.MainModel',

'TutorialApp.view.main.List'

],

controller: 'main',

viewModel: 'main',

plugins: 'viewport',

ui: 'navigation',

tabBarHeaderPosition: 1,

titleRotation: 0,

tabRotation: 0,

header: {

layout: {

align: 'stretchmax'

},

title: {

bind: {

text: '{name}'

},

flex: 0

},

iconCls: 'fa-th-list',

items: [{

xtype: 'button',

text: 'Logout',

margin: '10 0',

handler: 'onClickButton'

}]

},

tabBar: {

flex: 1,

layout: {

align: 'stretch',

overflowHandler: 'none'

}

},

responsiveConfig: {

tall: {

headerPosition: 'top'

},

wide: {

headerPosition: 'left'

}

},

defaults: {

bodyPadding: 20,

tabConfig: {

plugins: 'responsive',

responsiveConfig: {

wide: {

iconAlign: 'left',

textAlign: 'left'

},

tall: {

iconAlign: 'top',

textAlign: 'center',

width: 120

}

}

}

},

items: [{

title: 'Home',

iconCls: 'fa-home',

// The following grid shares a store with the classic version's grid aswell!

items: [{

xtype: 'mainlist'

}]

}, {

title: 'Users',

iconCls: 'fa-user',

bind: {

html: '{loremIpsum}'

}

},{

title: 'Groups',

iconCls: 'fa-users',

bind: {

html: '{loremIpsum}'

}

}, {

title: 'Settings',

iconCls: 'fa-cog',

bind: {

html: '{loremIpsum}'

}

}]

});

8.        添加main逻辑。 “{appRoot}/app/view/main/MainController.js”文件例如以下:

Ext.define('TutorialApp.view.main.MainController',{

extend: 'Ext.app.ViewController',

alias: 'controller.main',

onItemSelected: function (sender, record) {

Ext.Msg.confirm('Confirm', 'Are you sure?', 'onConfirm', this);

},

onConfirm: function (choice) {

if (choice === 'yes') {

//

}

},

onClickButton: function () {

// Remove the localStorage key/value

localStorage.removeItem('TutorialLoggedIn');

// Remove Main View

this.getView().destroy();

// Add the Login Window

Ext.create({

xtype: 'login'

});

}

});

EXT-JS 6演示样例程序-Login演示样例程序的更多相关文章

  1. 将Ext JS 6应用程序导入Web项目

    由于Ext JS 6包含了Sencha Touch,因而在应用程序结构有了些改变,Ext JS 5的方法已经不适用于新版本了.经过研究,发现6导入Web项目要比5简单. 下面来说说导入的过程. 使用S ...

  2. 【翻译】探究Ext JS 5和Sencha Touch的布局系统

    原文:Exploring the Layout System in Ext JS 5 and Sencha Touch 布局系统是Sencha框架中最强大和最有特色的一个部分. 布局要处理应用程序中每 ...

  3. 【翻译】Sencha Ext JS 5公布

    原文:Announcing Sencha Ext JS 5 简单介绍 我代表Sencha和整个Ext JS团队,非常自豪的宣布,在今天,Sencha Ext JS 5公布了.Ext JS 5已经迈出了 ...

  4. 【翻译】如何创建Ext JS暗黑主题之一

    原文:How to Create a Dark Ext JS Theme– Part 1 概述 我是不是都要演示我的Spotifinder Ext JS应用程序.它是一个很酷的应用程序,可连接到Las ...

  5. Ext JS 4 新特性2:配置项属性(config)之二

    Ext JS 4 新特征2:配置项属性config之二 ☞ Config(自动的setters和getters) Ext JS 4介绍了config声明方式,在Ext JS 中也有几个例子:在运行程序 ...

  6. 【翻译】了解Ext JS 5的小部件

    原文:Understanding Widgets in Ext JS 5 在Ext JS 5,引入了新的"widgetcolumn",支持在网格的单元格中放置组件.同时,还在Ext ...

  7. 【翻译】Sencha Ext JS 5发布

    原文:Announcing Sencha Ext JS 5 简介 我代表Sencha和整个Ext JS团队,很自豪的宣布,在今天,Sencha Ext JS 5发布了.Ext JS 5已经迈出了一大步 ...

  8. 【翻译】对于Ext JS 5,你准备好了吗?

    原文:Are You Ready for Ext JS 5? Ext JS 5:准备升级 对于Ext JS 5加入Sencha的大家庭,我们感到非常高兴!作为一个主要版本,在Ext JS 5引入了一堆 ...

  9. 【翻译】Ext JS 5的委托事件和手势

    原文:Delegated Events and Gestures in Ext JS 5 简介 Ext JS在5之前的版本,被设计为专用于传统鼠标输入的桌面设备使用.而从5开始,添加了对触屏输入的支持 ...

  10. 使用Ext JS,不要使用页面做组件重用,尽量不要做页面跳转

    今天,有人请教我处理办法,问题是: 一个Grid,选择某条记录后,单击编辑后,弹出编辑窗口(带编辑表单),编辑完成后单击保存按钮保存表单,并关闭窗口,刷新Grid. 这,本来是很简单的,但囿于开发人员 ...

随机推荐

  1. [转][Android] ListView中getView的原理+如何在ListView中放置多个item

      ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView). 一个新的视图被返回并显示 如果 ...

  2. django 获取 POST 请求值的几种方法(转)

    转载请注明出处:http://hi.baidu.com/leejun_2005/blog/item/9a37a22238f35c5bac34de54.html from:http://stackove ...

  3. 使用CefSharp在.Net程序中嵌入Chrome浏览器(二)——参数设置

    在实现了.Net程序中嵌入Chrome浏览器后,下一步的个性化操作就是加入一些设置了,在前面的文章中,我们可以看到在使用Chrome控件前,有如下一个操作: var setting = new Cef ...

  4. CSDN 四川大学线下编程比赛第一题:数字填充

    题目意思: http://student.csdn.net/mcs/programming_challenges peter喜欢玩数字游戏,但数独这种游戏对他来说太简单了,于是他准备玩一个难的游戏. ...

  5. c#封装三维向量,另外也看了下别人的C++封装

    一. c#实现 /* Vector3 Definition Created by taotao man on 2016-4-12 brief:封装三位向量类Vector3 // 修改记录: date: ...

  6. python使用游标访问数据

    游标是一种数据访问对象,可用于在表中迭代一组行或者向表中插入新行.游标有三种形式:搜索.插入或更新.游标通常用于读取现有几何和写入新几何. 每种类型的游标均由对应的 ArcPy 函数(SearchCu ...

  7. Android屏幕尺寸适配注意事项

    1 基本设置 1.1 AndroidManifest.xml设置 在中添加子元素 android:anyDensity="true"时,应用程序安装在不同密度的终端上时,程序会分别 ...

  8. Ping用法大全

              Ping是典型的网络工具.Ping可以辨别网络功能的某些状态. 这些网络功能的状态是日常网络故障诊断的基础.特别是Ping可以识别连接的二进制状态(也就是是否连通).可是,这仅仅是 ...

  9. ASP.NET 5 Beta5来了(翻译)

    在6月30日微软发布了ASP.NET 5 Beta5,我们可以从http://nuget.org上获取Beta5 的packages. 随着VS2015RC发布的ASP.NET 5的版本号是Beta4 ...

  10. iOS: 首次使用App时,显示半透明新手指引

    在很多的app,我们都会发现这样一个功能:就是app启动后进入主界面时,会有一个半透明的指引图,它会提示用户如何一步步进行操作,快速的熟悉app的使用规则,极大地方便了用户的使用,也加快了app的推广 ...