sencha app watch php,我的第一个基于SenchaTouch的WebApp

经过进一周的各种折腾,各种想放弃,各种纠结,最终还是顺利的完成了SenchaTouch的开发,回想起来感觉“甜甜的”,也充分体会到Sencha MVC开发模式的好处,以及SenchaTouch.js和Extjs的强大和牛逼,不得不佩服,在我看来这绝对是企业级开发非常强大和优雅的UI开发框架,不喜欢的就不要吐槽了。

这几天,天天看SenchaTouch的API,指导教程,论坛,不懂就查,几度崩溃,非常庆幸的是Sencha团队提供了非常完备的documents,一查就知道。开发经历还是有点纠结的,刚开始也是不习惯他的MVC开发,干脆所有js都写在一个页面里面,就这样乱乱的完成了,到最后花了一个晚上的时间将其转换成MVC架构的,才发现其架构的优雅,正是我所追求的,尤其是他对于控件的定位查找,方法绑定等,太帅了,这让我对Extjs4.0权限框架的开发充满了信心!!!

对于Sencha的东西,貌似很多人都说上手难,开发效率底。无可厚非刚开始确实很难懂,尤其是仅会用alert的童鞋,但是只要花点时间入门,跟着documents的教程走,会越来越好,开发效率也会越来越高。我以前从未接触SenchaTouch,当然有点Extjs的功底,也是硬花了1个多星期才写了一个很小的应用,现在再让我开发估计两天时间就差不多了,想学Sencha的同学刚开始一定不要怕哦,硬着头皮上.....

好了不说废话了,没图发个jb感慨,上本小应用的图(chrome效果,IPAD上要更好看):

ceb23dd8adb5fffa8112978f2c4b62a3.png

5e680bbd64cef7c53f4c85261fd27a6d.png

933b069a97199a7d3b3854da860e99bd.png

0dc2ca2a52b5729229616ebfa890f6fe.png

Ext.define('PLM.controller.Main', {

extend: 'Ext.app.Controller',

config: {

refs: {

main: '#PLMMain',

mainTB: '#PLMMain toolbar',

product: '#ViewProduct',

productDetail: '#ProductDetail',

cdnWin: 'formpanel',

btnSelCdns: '#PLMMain button[action=SelectCondition]',

btnCdnWinClose: 'formpanel button[action=CdnWinClose]',

btnCdnWinSearch: 'formpanel button[action=CdnWinSearch]',

//产品图册工具栏按钮

btnBackCategory: '#ViewProduct button[action=BackCategory]',

btnSortBySKC: '#ViewProduct button[action=SortBySKC]',

btnSortByDesignId: '#ViewProduct button[action=SortByDesignId]',

btnDesignImg: '#ViewProduct button[action=DesignImg]',

btnSampleImg: '#ViewProduct button[action=SampleImg]',

btnImgType: '#ViewProduct #segBtnImageType',

productToolbar: '#ViewProduct #productviewtb',

//产品详细信息

productDetailTB: '#ProductDetail #detailbar',

btnBackProduct: '#ProductDetail button[action=BackProduct]',

btnCancelProduct: '#ProductDetail button[action=CancelProduct]',

crslDesign: '#ProductDetail #crsl_design',

crslSample: '#ProductDetail #crsl_sample',

crslWf: '#ProductDetail #crsl_wf'

},

control: {

//产品详细信息

product: {

itemtap: 'ProductClick'

},

btnBackProduct: {

tap: function () {

this.getProductDetail().hide('popOut');

}

},

btnCancelProduct: {

tap: 'operateimg'

},

//选择条件窗体

btnSelCdns: {

tap: 'showConditionWin'

},

btnCdnWinClose: {

tap: 'CdnWinClose'

},

btnCdnWinSearch: {

tap: 'CdnWinSearch'

},

main: {

itemtap: 'CategoryClick'

},

btnBackCategory: {

tap: function () {

Ext.Viewport.setActiveItem(this.getMain());

}

},

btnSortBySKC: {

tap: function () {

this.getProduct().getStore().sort('productName', 'ASC');

}

},

btnSortByDesignId: {

tap: function () {

this.getProduct().getStore().sort('designerId', 'ASC');

}

},

btnDesignImg: {

tap: function () {

this.getProduct().setItemTpl(tplDesign);

this.getProduct().getStore().load();

}

},

btnSampleImg: {

tap: function () {

this.getProduct().setItemTpl(tplSample);

this.getProduct().getStore().load();

}

}

},

},

init: function () {

//第一次事件加载

},

launch: function () {

this.showConditionWin();

//获取用户

ub = this.getMainTB();

Ext.Ajax.request({

url: '/View/Reports/restful/GetCurUser.ashx',

callback: function (options, success, response) {

if (success) {

ub.setTitle("您好:"+response.responseText);

}

}

});

},

//显示条件窗口

showConditionWin: function () {

win = this.getCdnWin();

if (win == null) {

Ext.Viewport.add(Ext.create('condition'));

win = this.getCdnWin();

}

win.show({ type: 'slide', direction: 'down' });

},

//关闭条件窗口

CdnWinClose: function () {

this.getCdnWin().hide('popOut');

},

//查询

CdnWinSearch: function () {

this.getCdnWin().hide({ type: 'slideOut', direction: 'right' });

//加载数据

this.LoadCategoryData();

},

//查询品类

LoadCategoryData: function () {

win = this.getCdnWin();

cdt = {

brand: win.getValues().sbrand,

season: win.getValues().sseason,

series: win.getValues().sseries,

boduan: win.getValues().sboduan,

designer: win.getValues().sdesigner,

skc: win.getValues().sskc

};

this.getMain().getStore().getProxy().setExtraParams(cdt);

this.getMain().getStore().load();

currentCGRY = "";

},

//单击品类

CategoryClick: function (list, index, item, record) {

if (this.getProduct() == null)

Ext.Viewport.add(Ext.create('Product'));

Ext.Viewport.setActiveItem(this.getProduct());

this.LoadProductData(list.getStore().getAt(index).get('category'));

},

//根据品类加载产品图册信息

LoadProductData: function (cgry) {

if (currentCGRY != cgry) {

win = this.getCdnWin();

cdt = {

brand: win.getValues().sbrand,

season: win.getValues().sseason,

series: win.getValues().sseries,

boduan: win.getValues().sboduan,

designer: win.getValues().sdesigner,

skc: win.getValues().sskc,

category: cgry

};

this.getProduct().getStore().getProxy().setExtraParams(cdt);

this.getProduct().setItemTpl(tplDesign);//设置格式

//重置 图片类型 按钮

this.getBtnImgType().setPressedButtons(this.getBtnDesignImg());

this.getProductToolbar().setTitle(cgry);

this.getProduct().getStore().load();

currentCGRY = cgry;//缓存

}

},

//取消产品

operateimg: function () {

skcname = this.getProductDetailTB().getTitle().getHtml();

//遮罩

Ext.Msg.confirm("请确认", "您确认暂停该产品吗?", function (id) {

if (id == "ok" || id == "yes") {

Ext.Viewport.setMasked({

xtype: 'loadmask',

message: '请稍候...'

});

Ext.Ajax.request({

url: '/View/Reports/restful/Operates.ashx',

method: 'POST',

params: {

skc: skcname,

type: 'cancel'

},

callback: function (options, success, response) {

Ext.Viewport.unmask();//关闭遮罩

if (success) {

obj = Ext.JSON.decode(response.responseText);

Ext.Msg.alert('提示', obj.msg);

} else {

Ext.Msg.alert('异常', '网络异常,操作失败!');

}

}

});

}

});

},

//单击产品

ProductClick: function (list, index, item, record) {

if (this.getProductDetail() == null)

Ext.Viewport.add(Ext.create('ProductDetail'));

temp = list.getStore().getAt(index);

//标题

this.getProductDetailTB().setTitle(temp.get('productName'));

//图片

if (temp.get('desimgb') == '')

this.getCrslDesign().setHtml('设计草图

暂无大图显示

');

else {

url = "/FlexPLMAPI/GetFlexImage.aspx?DT=true&IMG=" + encodeURIComponent(temp.get('desimgb'));

this.getCrslDesign().setHtml('设计草图'%20+%20url%20+%20'');

}

if (temp.get('smpimgb') == '')

this.getCrslSample().setHtml('样衣图片

暂无大图显示

');

else {

url = "/FlexPLMAPI/GetFlexImage.aspx?DT=true&IMG=" + encodeURIComponent(temp.get('smpimgb'));

this.getCrslSample().setHtml('样衣图片'%20+%20url%20+%20'');

}

wfhistory = this.getCrslWf();

canclebtn = this.getBtnCancelProduct();

canclebtn.hide();

this.getProductDetail().show('pop');

this.getCrslWf().setHtml('

//获取产品生命周期

brand = '';

if (temp.get('productName').substring(0, 1) == "E")

brand = "EP";

else if (temp.get('productName').substring(0, 1) == "G")

brand = "E.Prosper";

Ext.Ajax.request({

url: '/View/Reports/restful/GetLife.ashx',

method: 'POST',

params: {

vr: temp.get('pvr'),

brand: brand

},

callback: function (options, success, response) {

if (success) {

obj = Ext.JSON.decode(response.responseText);

if (obj.success == "true") {

wfhistory.setHtml("

" + obj.data + "

");

//产品暂停按钮

if (obj.pause == "true")

canclebtn.show();

else

canclebtn.hide();

}

else {

wfhistory.setHtml("

" + obj.msg + "

");

}

} else {

wfhistory.setHtml("

网络异常,无法获取数据!

");

Ext.Msg.alert('异常', '网络异常,无法获取数据');

}

}

});

}

});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kali linux关闭进程,技术|如何使用 Kali Linux 黑掉 Windows

Kali Linux 派生自 Debian Linux,主要用于渗透测试,拥有超过 300 个的预安装好的渗透测试工具。Metasploit 项目中 Metasploit 框架支持 Kali Linux 平台,Metasploit 是一个用于开发和执行安全利用代码(security exploit)的工具。让我们来使用…

linux 内核 82540网卡,Linux网卡as4.2 编译安装及配置准备

Linux网卡as4.2 编译安装及配置准备[日期:2008-03-28]来源:Linux公社作者:Linux整理[字体:大 中 小]确定make gcc kernel-devel包必须安装,没安装的话需要手动安装查看是否安装方法rpm -aq|gccrpm -aq|makerpm -aq|kernel-devel解…

linux管理进程和计划任务,Linux进程和计划任务管理

本章结构#查看进程#控制进程#at一次性任务设置#crontab周期性任务设置程序和进程的关系#程序保存在硬盘、光盘等介质中的可执行代码和数据静态保存的代码#进程在cpu及内存中运行的程序代码动态执行的代码父、子进程:每个进程可以创建一个或多个进程查看进程ps#ps命令…

less linux命令,less 命令用法详解

less 在 Linux 中用来查看文件,它可以以分页的方式显示文件内容。目前和tail 是用来查看文件的常用命令命令格式less [参数] 文件1、使用示例less a.txt用来查看文件按f 或 space 向下翻一页按b向前翻一页其实很好记f即forward 向前b即backward 向后关键最强大的一点…

linux下软件包清理,Linux运维知识:如何清理Linux系统中的孤立、无用的软件包

本文主要向大家介绍了Linux运维知识的如何清理Linux系统中的孤立、无用的软件包,通过具体的内容向大家展现,希望对的大家学习Linux运维知识有所帮助。在Linux下安装软件,通常会自动安装一些依赖包或库。在你卸载某个软件后,这个软…

linux 多个定时器,timer: 一个Linux下的超级精简的多重定时器:可实现成千上万个定时任务,定时精度可达纳秒级别,且同一时间点可添加不同的任务!适用于云后台服务和嵌入式等各种环境。...

MT_Timer(MT译为Multiple或Multi)一、介绍一个Linux下的超级简洁的定时器:利用epoll机制和timerfd新特性实现的多重、多用、多个定时任务实现。只需要使用TIMER_CREATE()接口创建一个定时器实体,即可向其添加成千上万个定时任务,定时任务可达…

C++文件类

C 标准类库中有三个类可以用于文件操作,它们统称为文件流类。这三个类是: ifstream:用于从文件中读取数据。ofstream:用于向文件中写人数据。fstream:既可用于从文件中读取数据,又可用于 向文件中写人数据。…

window10内核Linux,windows 10中发布完整的Linux内核

5月8日消息: 近年来,微软对Linux开发者社区的支持令许多人感到惊讶,包括将诸如Bash shell之类的东西引入到Windows,或者在Windows 10中支持原生OpenSSH,甚至包括Windows应用商店上架了Ubuntu、SUSE Linux和Fedora。现在…

C++ open 打开文件

在对文件进行读写操作之前,先要打开文件。打开文件有以下两个目的: 1 . 通过指定文件名,建立起文件和文件流对象的关联,以后要对文件进行操作时,就可以通过与之关联的流对象来进行。 2 . 指明文件的使用方式。使用方…

c语言scanf函数隐藏的缓冲区,零基础学C语言 笔记四 Scanf函数清除缓冲区

Scanf函数清除缓冲区之前涉及到scanf会先到缓冲区看看是否存在数据,若存在数据,就直接拿缓冲区的数据过来使用,这就涉及到了一个问题,那如果缓冲区的数据不是我想要的呢?方法一:我们用scanf吸收掉我们的代码…

C++ 流类和流对象

程序中常用的 cin 和 cout,分别用于从键盘输入数据和向屏幕输出数据(简称为标准 I/O)。除此之外,程序还可以从文件中读入数据,以及向文件中写入数据(简称为文件 I/O)。 数据输入和输出的过程也是数据传输的…

C++ cout格式化输出

希望按照一定的格式进行输出,如按十六进制输出整数,输出浮点数时保留小数点后面两位,输出整数时按 6 个数字的宽度输出,宽度不足时左边补 0,等等。C 中的 cout 对象则使用流操作算子(你也可以叫做格式控制符…

C语言按各科分数段统计人数,(更新啦)学校学生成绩统计通用模板(科目、分数、统计分数段等均可自定,班级数、学生人数不受限制)...

更新说明:1、增加了导入、导出数据功能。2、该功能可以实现版本更新时不用手动复制数据,可实现一键导入导出。导语微信号☞gdpc-service这是一款适用于学校平时统一考试成绩统计表。这是长期根据学校的需求设计出的成绩统计,学生成绩清晰明了…

ndows10同时打印多份文档,Windows10如何同时重命名多个文件

在Win10系统中整理重要文件时,很多用户都会对文件进行重命名,以便节省更多的时间。而如果文件数量非常多的话,我们就需要对其进行批量重命名。那么,这该如何操作呢?今天,小编就给大家分享一下Win10系统同时…

C语言数理逻辑题目,数学逻辑推理题整理,看看你能答对多少

年龄的秘密A、B、C三人的年龄一直是一个秘密.将A的年龄数字的位置对调一下,就是B的年龄;C的年龄段两倍是A与B两个年龄的差数;而B的年龄是C的10倍.请问:A、B、C三人的年龄各是多少?失误的程序员高先生是一个高级程序员,但是他最近设计的三款机器人却出了…

android 自定义库,Android自定义Log库

背景我们在开发的时候肯定会打一些Log,特别是在调试代码或者bug的时候,我们都会打一些Log日志来记录,但是当我们发布正式版本的时候,尼玛,要一行一行的去掉,这就尴尬了。懵逼状态励志封装Log库本来想使用gi…

C++ 处理输入输出错误

处理输入输出时,我们必须预计到其中可能发生的错误并给出相应的处理措施。 当我们输入时,可能会由于人的失误(错误理解了指令、打字错误等)、文件格式不符、错误估计了情况等原因造成读取失败。当我们输出时,如果输出设…

各种语言的 Hello World

学习编程的小伙伴们可能会发现,不敢我们学习哪种语言,我们的第一个程序都是Hello World!,所以我们非常有必要清楚的知道Hello World!使用每一种编程语言的写法。 使用C语言实现Hello World! #includeint main(void){printf("Hello Wor…

Android拦截浏览器广告,浏览器拦截广告的几种方法

悬浮闪动的弹窗广告和牛皮癣一样铺满全屏的低质广告,极大地破坏了浏览网页的体验。通过启用浏览器自带的广告拦截功能,或为浏览器安装广告拦截插件,能够还原网页原本的清爽真容。浏览器自带-安卓广告拦截操作说明口碑比较好的 Via、夸克和 X浏…

android打包规范包含第三方库aar,Android Studio 打包AAR和第三方静态库(示例代码)

需求现在有一个第三方库libstatic_add.a和对应的头文件static.h,要求封装一个Module,该Module依赖这个静态库,要求打包的Module包含该静态库。方案创建Android Studio Library Project创建Project时,记得添加"Include C Sup…