1.一个WPF版的项项目Layui前端UI库
2.在DJango中如何使用layui(2023年最新整理)
3.bootstrapålayer
4.layeruiå¦ä½ä½¿ç¨LayerUI
一个WPF版的Layui前端UI库
WPF版的Layui前端UI样式库:Layui-WPF,为.NET后端开发者带来全新的目源码UI设计体验。
Layui-WPF,源码作为WPF框架下的项项目一套UI组件库,它充分利用了WPF的目源码强大功能,提供丰富的源码unitygithub源码UI组件和设计元素,让开发者能够构建出具有高度交互性和视觉吸引力的项项目桌面应用。
Layui,目源码作为一套轻量级开源前端组件库,源码以其简约优雅的项项目风格和易用性,成为了构建网页界面的目源码优选。Layui-WPF继承了这一传统,源码将Layui的项项目简洁理念与WPF的灵活性结合,为开发者提供了一套既简单又强大的目源码UI解决方案。
项目源码运行过程,源码只需设置LayuiApp为启动项目,即可启动运行。FM的网站源码项目运行截图展示了其界面效果,直观展示了Layui-WPF的强大功能。
如需了解更多项目实用功能和特性,欢迎访问项目开源地址,项目地址为:github.com/Layui-WPF-Te...。记得给项目一个Star支持,以鼓励开发者。
该项目已被收录到C#/.NET/.NET Core优秀项目和框架精选中,关注精选能帮助开发者及时了解最新动态和最佳实践,提升开发效率和质量。
加入技术群,添加小编微信并备注进群(微信:mm),公众号:dotNet编程大全。持续学习和探索,每一天的进步都是通往成功的阶梯。
学习永无止境,超人小程序源码知识的积累如同河流汇聚成江河,每一天的学习都为未来铺路。在这个过程中,你会发现自己不断成长,最终成为自己渴望成为的那个人。
在DJango中如何使用layui(年最新整理)
导读:今天首席CTO笔记来给各位分享关于在DJango中如何使用layui的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!Layui(二):图标和按钮方法1:使用字符实体
只需要在一个class为layui-icon的容器类标签中加入字符的unicode码即可。
相关样式:layui-icon,代表使用layui的图标处理样式去渲染
方法2:使用样式
在class为layui-icon的容器类标签后追加对应的图标样式,而不需要在写unicode码。
相关图标样式可以去官网的文档查找。
相关样式:
(1)必要样式:layui-btn
(2)主题样式:
layui-btn-primary原始按钮
layui-btn-normal百搭按钮
layui-btn-warm暖色按钮
layui-btn-danger警告按钮
layui-btn-disabled禁用按钮
(3)大小样式:
layui-btn-lg最大按钮
layui-btn-sm小型按钮
layui-btn-xs迷你按钮
(4)图标结合:
把图标的样式也添加到class中即可
(5)圆角按钮:
layui-btn-radius
(6)按钮组:
套上一层class为layui-btn-group
layui按钮的事件监听可以使用jquery来做。
在layui内部使用jquery的btc商城源码价格方式:
layui的基本使用介绍方法:layui.define([mods],callback)
本地存储是对localStorage和sessionStorage的友好封装,可更方便地管理本地数据。
localStorage持久化存储:layui.data(table,settings),数据会永久存在,除非物理删除。
sessionStorage会话性存储:layui.sessionData(table,settings),页面关闭后即失效。注:layui2.2.5新增
layui.device(key)
方法/属性描述
layui.cache静态属性。获得一些配置及临时的缓存信息
layui.extend(options)拓展一个模块别名,如:layui.extend({ test:'/res/js/test'})
layui.each(obj,fn)对象(Array、Object、DOM对象等)遍历,可用于取代for语句
layui.getStyle(node,name)获得一个原始DOM节点的style属性值,如:layui.getStyle(document.body,'font-size')
layui.img(url,callback,error)预加载
layui.sort(obj,key,desc)将数组中的对象按某个成员重新对该数组排序,如:layui.sort([{ a:3},{ a:1},{ a:5}],'a')
layui.router()获得location.hash路由,目前在Layui中没发挥作用。对做单页应用会派上用场。手机搭建php源码
layui.hint()向控制台打印一些异常信息,目前只返回了error方法:layui.hint().error('出错啦')
layui.stope(e)阻止事件冒泡
layui.onevent(modName,events,callback)自定义模块事件,属于比较高级的应用。有兴趣的同学可以阅读layui.js源码以及form模块
layui.event(modName,events,params)执行自定义模块事件,搭配onevent使用
layui.factory(modName)用于获取模块对应的define回调函数
模块命名空间
layui的模块接口会绑定在layui对象下,内部由layui.define()方法来完成。每一个模块都会一个特有的名字,并且无法被占用。所以你无需担心模块的空间被污染,除非你主动deletelayui.{ 模块名}。调用模块可通过layui.use方法来实现,然后再通过layui对象获得模块接口。
如何使用内部jQuery
//主动加载jquery模块
layui.use(['jquery','layer'],function(){
var//重点处
,layer=layui.layer;
//后面就跟你平时使用jQuery一样
$('body').append('hellojquery');
});
layui打开页面先加载
一、我们在使用layui.table前必须初始化layui模块,用到的模块一般常用的有两种layer(弹出层)和table(数据表格),然后用function进行模快的初始化,当然在初始化模块之前我们必须声明几个全局变量,
声明两个变量(layer和layuiTable)来接收模块的数据,并且保存layui模块以便全局使用。
声明一个变量(tabStudent)来放置表格数据。
二、开始初始化模块
首先我们在加载事件里面将声明的那两个变量来接收layer(弹出层)和table(数据表格)
三、接下来就是初始化表格,初始化得到的数据就放入刚刚声明的全局变量(tabStudent)里面
四、在然后就是写初始化表格里面的参数:
将表格的ID放入elem(指定原始table容器的选择器或DOM,方法渲染方式必填)里面
查询方法的路径(url:异步数据接口相关参数,url参数为必填项)
设置表头(cols)将表格的结构放入
例:
需要写一个方法来设置最后一列来返回设置在最后一列所设置的操作按钮,比如当我们要在操作那行设置一个修改和删除的按钮的时候:
Onclick是点击事件
4.设置表格每页的行数:page(开启分页):{
limit:n(指定每页显示的条数)
limits:[5,,,n](每页条数的选择项)}
5.当你需要表格的一些“列显示隐藏”“打印”或者“导出”功能的时候你就必须设置开启表格的工具栏
参数toolbar的作用便是开启表格头部工具栏区域,该参数支持4种类型值:
toolbar:’#toolbarDemo(注:该代码取的是自定义好的模板的ID该模板可以放在页面的任意位置)’指定自定义工具栏模板选择器toolbar:’xxx’直接传入工具栏模板字符toolbar:true仅开启工具栏,不显示左侧模板toolbar:‘default’让工具栏左侧显示默认的内置模板该参数的默认值为false.
6.设置表格的图标:
defaultToolbar:可以自由配置头部工具右侧的图标,数组可以3种:
defaultToolbar:[‘filter’]:显示筛选图标
defaultToolbar[‘exports’]:显示导出图标
defaultToolbar[‘print’]:显示打印图标
这些值也可以根据排序的顺序来显示排版图标,如defaultToolbar:[‘filter’,’exports’,’print’
7.Table容器的默认宽度是跟随它的父元素铺满的,你也可以设定一个固定的值(width),当容器中的内容超出了该宽度时,会自动出现横向滚动条。甚至还可以设置表格的高(height)。
8.如果你点击一个切换分页时不知道它是否为加载状态,则你可以添加loading这个参数,它的作用就是是否显示加载条,默认值是为true,如果设置false则在切换分页时不会出现加载条(注:该参数只是适于url参数开启的方式)。
五、然后就是在控制器为表格添加数据,数据添加完成后将其方法名称放入url里面。
layuitabletoolbar的使用使用layui的table功能时,在参考官方文档layui数据表格情况下,修改工具栏左侧显示默认的内置模板。
toolbar:'default'?//让工具栏左侧显示默认的内置模板
左侧的内置以layui-icon显示的操作按钮就展示出来,如图所示-左侧部分
但有时根据项目需求,不需要显示添加编辑删除中的某一个或者某两个功能时,我们可以如下操作:
点击功能方法参考官网文档即可;
例如:不想自定义一个复杂的导出功能,在使用官网给的例子的情况下,使用自己的导出方法。删除掉默认模板导出功能,如下图所示:
总结:利用官网文档学习使用layui框架,再此基础上进行修改和完善达到我们想要的功能。
Layui-基本使用、数据调试首先是官方文档。我真的不是第一次觉得阅读官方文档比百度上搜索要有效率几百倍了,当然前提教程是汉语。
组件库
使用文档
Springboot+Thymeleaf+layui框架的配置与使用
Springdatajpa分页+layui数据表格渲染数据
我觉得我现在能看懂了,感慨。
layui.table里面json数据有多层嵌套,请问要怎么获取数据?
下面这个主楼里用的是改底层源码的方式,我觉得不可取。
layui数据表格total和data无法使用多层嵌套json格式的数据的解决办法
下面有对主楼这样的补充,但也是改的底层源码:
我用的版本中Layui符号是以字体的形式表示的(layui2.3.0之前只支持采用unicode字符),可能也是被拦截掉了,参考以下写法。
SpringBoot中引用LayUIfont不显示问题解决办法
以后可以直接使用内联元素调出字体图标。
Layui字体图标库
第二种方法(我没试过):
SpringBoot使用layui的字体图标时无法正常显示解决办法
layuiAdmin使用总结,基于springmvc
Layui在MVC下的配置过程,我没用到,但是感觉不错。去看了看这位以前的文章,感叹大佬真的太多了,随处一看就都是大佬。
虽然大家都说毕设很水,但是年轻又有为的人却不计其数,可能他们很聪明早就开始做自己的项目了,没把毕设当作发力点。那我就将错就错吧,我想学习,我很羡慕。
通过table.render来刷新、绘制table
Layui表格单元格编辑保存
le可编辑扩展下拉框编辑器
layui的table中日期格式转换
这个除了显示其实还有个问题:当这个日期还是null时,会自动显示当前日期,所以需要加一个判断,不为空才显示。
下面是我用在了进度计划行内编辑中的例子。
如何在Django中使用第三方库DATABASES={
'default':{
'ENGINE':'django.db.backends.sqlite3',#Add'postgresql_psycopg2','mysql','sqlite3'or'oracle'.
'NAME':'demo.db',#Orpathtodatabasefileifusingsqlite3.
#Thefollowingsettingsarenotusedwithsqlite3:
'USER':'',
'PASSWORD':'',
'HOST':'',#Emptyforlocalhostthroughdomainsocketsor'.0.0.1'forlocalhostthroughTCP.
'PORT':'',#Settoemptystringfordefault.
}
}
INSTALLED_APPS=(
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
#Uncommentthenextlinetoenabletheadmin:
#'django.contrib.admin',
#Uncommentthenextlinetoenableadmindocumentation:
#'django.contrib.admindocs',
'south',
'LearnSouth',
'books',
)
结语:以上就是首席CTO笔记为大家整理的关于在DJango中如何使用layui的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于在DJango中如何使用layui的相关内容别忘了在本站进行查找喔。
bootstrapålayer
bootstrapålayeræä¹ä½¿ç¨
Bootstrapå¸å±
ç®ä»
å¨æ¬æç¨ä¸ï¼æ¨å°å¦ä¹ å¦ä½ä½¿ç¨Bootstrapå·¥å ·å æ¥å建åºå®å¸å±åæµå¨å¸å±ãæç¨æ¯åºäºBootstrapçæ¬2.0ã
å¨çæ¬2.0ä¸ï¼Bootstrap为ææºãå¹³æ¿çµèãç¬è®°æ¬ãå°åå°å¼æºã大å宽å±å°å¼æºçæ·»å äºååºç¹æ§ã
å¯ä»¥éè¿å页é¢æ·»å bootstrap-responsive.cssæ件ï¼ä½äºdocs\assets\cssä¸ï¼æ¥è®©å¸å±å ·æååºæ§ã
Bootstrapåºå®å¸å±
å¦ææ¨æ³è¦å建åºäºåºå®åç´ æ°çç½é¡µæappï¼è¯·çè¿é¨åçæç¨ã
ç¨æ³
body
divclass="container"
...
/div
/body
解é
bootstrap.cssï¼ä½äºbootstrapç主æ件夹çdocs\assets\cssä¸ï¼ç第å°è¡ï¼ä¸ºå建主容å¨æ¸²ææ ·å¼ï¼ä»èå建ä¸ä¸ªåºå®å¸å±ãåºå®å¸å±çç®çæ¯ä¸ºç½é¡µæappå建ä¸ä¸ªåç´ ï¼é»è®¤ï¼å®½çå¸å±ã
Bootstrapåºå®å¸å±çå®ä¾
ä¸é¢ç代ç å建ä¸ä¸ªç½é¡µåºå®å¸å±ã为äºå®å¶ï¼é¤äºé»è®¤æ ·å¼ï¼è¿éå建ä¸ä¸ªæ°çcssæ件example-fixed-layout.cssï¼ä¸bootstrap.cssä½äºåä¸ä¸ªæ件夹ä¸ã
CSS代ç
body{
padding-top:px;
padding-bottom:px;
}
.navli{
padding-top:5px;
}
.leaderboard{
padding:px;
margin-bottom:px;
background-image:url('/twitter-bootstrap/images/gridbg.gif');
background-repeat:repeat;
-webkit-border-radius:6px;
-moz-border-radius:6px;
border-radius:6px;
}
.leaderboardh1{
font-size:px;
margin-bottom:5px;
line-height:1;
letter-spacing:-1px;
color:#FF;
}
.leaderboardp{
font-size:px;
font-weight:;
line-height:px;
}
layeruiåbootstrapçå¼åæåªäºï¼
boostrapå½å¤çå端æ¡æ¶ï¼æ¯è¾æçäºï¼å¹¶ä¸å ¼å®¹å¤ç§è®¾å¤ï¼èªéé æ¯è¾å¥½ï¼ç»ä»¶æ¯layuiæ¼äº®ç¹
layuiæ¯å½äººå¼åçï¼è¿å¤äºå¼åé¶æ®µï¼å¹¶ä¸æ¯å®å ¨æççå端uiæ¡æ¶ï¼åç¡®å°è¯´ï¼å¥¹æ´å¤æ¯ä¸ºæå¡ç«¯ç¨åºåé身å®åï¼ä½ æ éæ¶è¶³åç§åç«¯å·¥å ·çå¤æé ç½®ï¼åªéé¢å¯¹æµè§å¨æ¬èº«ï¼è®©ä¸åä½ æéè¦çå ç´ ä¸äº¤äºï¼ä»è¿éä¿¡æææ¥ã
psï¼æ¯layuiï¼layeræ¯layuiçä¸ä¸ªæ¨¡å为弹çªæ¨¡å
bootstrapålayerç¨åªä¸ªå¥½ï¼ä¸å类弹åºå±ç»ä»¶ç¸æ¯ï¼layerçä¼å¿ææ¾ã
Bootstrapålayerå¸å±
Bootstrapåºå®å¸å±
使ç¨Bootstrapå·¥å ·å æ¥å建åºå®å¸å±åæµå¨å¸å±ãæç¨æ¯åºäºBootstrapçæ¬2.0ãå¨çæ¬2.0ä¸ï¼Bootstrap为ææºãå¹³æ¿çµèãç¬è®°æ¬ãå°åå°å¼æºã大å宽å±å°å¼æºçæ·»å äºååºç¹æ§ãå¯ä»¥éè¿å页é¢æ·»å bootstrap-responsive.cssæ件ï¼ä½äºdocs\assets\cssä¸ï¼æ¥è®©å¸å±å ·æååºæ§ã
layerå¼¹çª
layerï¼ä¸ä¸ªå¯ä»¥è®©ä½ æ³å°å³å¯åå°çwebå¼¹çª(å±)解å³æ¹æ¡(jsç»ä»¶)ï¼ä½è è´¤å¿(å端å¼åå·¥ç¨å¸)ãlayer侧éäºç¨æ·çµæ´»çèªå®ä¹ï¼ä¸ºä¸å人ç使ç¨ä¹ æ¯æä¾å¨åãå ¶æä¹å¨äºï¼å¯ä»¥è®©æ¨ç页é¢æ¥ææ´ä¸°å¯ä¸ä¾¿æ·çæä½ä½éªï¼èæ¨åªéå¨è°ç¨æ¶ç®åå°é ç½®ç¸å ³åæ°ï¼å³å¯è½»æ¾å®ç°ã
Bootstrapï¼æ¥èªTwitterï¼æ¯ç®åå¾å欢è¿çå端æ¡æ¶ãBootstrapæ¯åºäºHTMLãCSSãJavaScriptçï¼å®ç®æ´çµæ´»ï¼ä½¿å¾Webå¼åæ´å å¿«æ·ãå®ç±Twitterç设计å¸MarkOttoåJacobThorntonåä½å¼åï¼æ¯ä¸ä¸ªCSS/HTMLæ¡æ¶ã
Bootstrapæä¾äºä¼é çHTMLåCSSè§èï¼å®å³æ¯ç±å¨æCSSè¯è¨LessåæãBootstrapä¸ç»æ¨åºåé¢å欢è¿ï¼ä¸ç´æ¯GitHubä¸ççé¨å¼æºé¡¹ç®ï¼å æ¬NASAçMSNBC(å¾®è½¯å ¨å½å¹¿æå ¬å¸)çBreakingNewsé½ä½¿ç¨äºè¯¥é¡¹ç®ãå½å ä¸äºç§»å¨å¼åè è¾ä¸ºçæçæ¡æ¶ï¼å¦WeX5å端å¼æºæ¡æ¶çï¼ä¹æ¯åºäºBootstrapæºç è¿è¡æ§è½ä¼åèæ¥ã
layeruiå¦ä½ä½¿ç¨LayerUI
lauiçåºæ¬ç¨æ³ä»ç»æ¹æ³:layui.define([mods]ï¼åè°)LocalStorageæ¯å¯¹æ¬å°åå¨åsessionStorageçå好å°è£ ï¼å¯ä»¥æ´æ¹ä¾¿å°ç®¡çæ¬å°æ°æ®ã
LocalStorageæä¹ åå¨:layui.data(tableï¼settings)ï¼é¤éç©çå é¤ï¼å¦åæ°æ®å°æ°¸è¿åå¨ã
sessionstoragesessionstorage:layui.sessiondata(tableï¼settings)ï¼å ³é页é¢æ¶ä¼å¤±æã注æ:laui2.2.5æ¯æ°çã
layui.device(å¯é¥)
æ¹æ³/å±æ§æè¿°
Layui.cacheéæå±æ§ãè·åä¸äºé ç½®å临æ¶ç¼åä¿¡æ¯ã
Layui.extend(options)æ©å±æ¨¡åå«åï¼å¦layui.extend({ test:/RES/js/test})
éålayui.each(objï¼fn)对象(æ°ç»ï¼å¯¹è±¡ï¼DOM对象çã)ï¼å¯ä»¥ç¨æ¥æ¿æ¢forè¯å¥ã
Layui.getStyle(nodeï¼name)è·åä¸ä¸ªåå§DOMèç¹çæ ·å¼å±æ§å¼ï¼æ¯å¦:Layui.getstyle(document.bodyï¼font-size)
layui.img(url,callback,error)å¾çé¢å è½½Layui.img(urlãåè°ãé误)å¾åé¢å è½½
Layui.sort(objï¼keyï¼desc)æ ¹æ®æ个æå对æ°ç»ä¸ç对象è¿è¡éæ°æåºï¼æ¯å¦:Layui.sort([{ a:3}ï¼{ a:1}ï¼{ a:5}]ï¼ä¸)
Layui.router()è·ålocation.hashè·¯ç±ï¼ä½ç®åå¨Layuiä¸ä¸èµ·ä½ç¨ã对äºå页åºç¨ç¨åºæ¥è¯´ï¼å®ä¼å¾æ¹ä¾¿ã
Layui.hint()å°ä¸äºå¼å¸¸ä¿¡æ¯æå°å°æ§å¶å°ï¼åªæerroræ¹æ³:layui.hint()ãé误(é误)
é²æ¢äºä»¶å泡ã
Layui.onevent(modnameï¼eventsï¼callback)èªå®ä¹æ¨¡åäºä»¶ï¼å±äºæ¯è¾é«çº§çåºç¨ãæå ´è¶£çåå¦å¯ä»¥ççlayui.jsçæºä»£ç å表å模åã
Layui.event(modnameï¼eventsï¼params)æ§è¡èªå®ä¹æ¨¡åäºä»¶ï¼å¹¶ä¸oneventä¸èµ·ä½¿ç¨ã
layui.factory(modName)ç¨äºè·å模å对åºçå®ä¹åè°å½æ°ã
å¨æ¨¡å空ä¹é´å½å
layuiç模åæ¥å£å°è¢«ç»å®å¨layui对象ä¸ï¼å ¶å é¨ç±layui.define()æ¹æ³å®æãæ¯ä¸ªæ¨¡åå°æä¸ä¸ªå¯ä¸çå称ï¼ä¸è½è¢«å ç¨ãæä»¥ä½ ä¸éè¦æ å¿æ¨¡åç空æ¿é´è¢«æ±¡æï¼é¤éä½ ä¸»å¨å äºæuiã{ 模åå称}ãå¯ä»¥éè¿layui.useæ¹æ³è°ç¨æ¨¡åï¼ç¶åéè¿layui对象è·å模åæ¥å£ã
å¦ä½ä½¿ç¨å é¨jQuery
//主å¨å è½½jquery模å
layui.use([jqueryå±]ï¼å½æ°(){
Var//å ³é®ç¹
ï¼layer=layui.layer
//å°±åä½ å¹³æ¶ç¨jQueryä¸æ ·ã
$(æ£æ).追å (ä½ å¥½jquery
});
pså¦ä½å¿«éæ¢åºç²¾è´ï¼
åå§ç©ä½æ®µæ°ç°å·²ç»è½ä¿®æ¹å å·²ç»å»ºå¥½æ¨¡ååä¿®æ¹å级段æ°ä¼ä½¿æ¨¡ååºç°é误ç´æ¥éæ©è§å¾å¤ªéå©è¾¹ç¼çº¿EditMeshééæ©Bevelå½ä»¤ä¹åè§ä½¿äºéå©å¤åæ»è¾¹è§åæ»ç¹å¼é¢æ¹æ ¼æ¥è°æ´åè§æ®µæ°å大å°ä¹å³è¾¹å±æ§æ éè°èoffset大å°Segments段æ°å ¶å®ä¹èªå·±è¯ä¸å°å¿æå±æ§æ å ³æDisplay-UIElements--ChannelBox/LayerEditoræé©å¼å¯å±æ§æ äºPS.æç¨ç¥éç¨ææåªåäºæ没ç¨è¿æè§å¾åºè¯¥ä¹ä¼å·®å¤å§
iOS7appstore带边æ¡çæé®æ¯æä¹å®ç°çï¼
å¯ä»¥ç¨viewçlayerå±æ§æ¥åçãå¦æåªæ¯ç®åå°å ä¸ä¸ªè¾¹æ¡çè¯ï¼å¯ä»¥è¿æ ·ï¼
UIButton*yourButton=;
//åå§åå·¥ä½ï¼è®¾ç½®æåï¼frameççï¼ç¥
//æé®è¾¹æ¡å®½åº¦
yourButton.layer.borderWidth=1.5;
//设置åè§
yourButton.layer.cornerRadius=4.5;
//设置é¢è²ç©ºé´ä¸ºrgbï¼ç¨äºçæColorRef
CGColorSpaceRefcolorSpace=CGColorSpaceCreateDeviceRGB();
//æ°å»ºä¸ä¸ªçº¢è²çColorRefï¼ç¨äºè®¾ç½®è¾¹æ¡ï¼å个æ°ååå«æ¯r,g,b,alphaï¼
CGColorRefborderColorRef=CGColorCreate(colorSpace,(CGFloat){ 1,0,0,1});
//设置边æ¡é¢è²
yourButton.start.layer.borderColor=borderColorRef;
å¦å¤ï¼è¿éæä¸ä¸ªç²¾å½©çä¾åï¼æ¨èä¸ä¸ï¼
/ios/UIButton-Bootstrap/e8cfab
osç³»ç»æ¶æï¼
第ä¸ãæä½ç³»ç»å±ï¼OSï¼
第äºãåç§åºï¼Librariesï¼åAndroidè¿è¡ç¯å¢ï¼RunTimeï¼
第ä¸ãåºç¨ç¨åºæ¡æ¶ï¼ApplicationFrameworkï¼
第åãåºç¨ç¨åºï¼Applicationï¼