#为operamasks增加HTML扩展方式的组件调用##背景
之前的[博文](http://www.cnblogs.com/p2227/p/3540858.html)中有提及到,发现easyui中的combobox,datebox,layout都有效率问题,其中layout的问题在[这里](http://www.cnblogs.com/p2227/p/3541162.html)有直接的解决方法,而combobox,datebox的问题其实在layout的DEMO中也处理了,这里主要是写其处理过程。##处理旧问题,发现新问题
既然easyui的组件有问题,没什么好说了,换另外一个组件好了,当时试了很多UI解决方案,鉴于界面、效率及源代码的质量问题,决定用`operamasks`去替换easyui中的combobox和datebox但是用惯了easyui的人会发现,easyui有一个很大的特点是,有很多属性可以直接写在html上,例如**<div id="win" iconCls="icon-save" title="My Window"></div>**iconCls和title就会直接加上去产生的组件上,而且也可以用类名去声明组件,这些operamasks都没有但是不要紧,两边的源代码都有,研究一下就OK了##分析easyui源代码
虽然easyui的源代码混淆了,但是认真看也能发现问题的(PS:后来发现[这里](http://jquery-easyui.googlecode.com/svn/trunk)有未经混淆的代码了)
里面有一个叫`parseOptions`的函数,就是把HTML上的属性转化为组件能使用的属性。而根据类名去渲染就更加容易找到了,因为API中直接就有一个`$.parser.parse`的方法,分析一下其源代码即可。##为operamasks增加HTML扩展方式的组件调用
经过测试和其他细节调整,最后代码是这样的
```javascript
var om = {dataStore:{},parse:function(key){var setData = {"Button":{parseOptions:function(obj){var $obj = obj instanceof jQuery ? obj : $(obj);return {//图片是用地址放上去的,而不是css,不科学,待改进icons: {left:$obj.attr("iconLeft") || $obj.attr("iconCls"),right:$obj.attr("iconRight")}}}},"Calendar":{parseOptions:function(obj){var $obj = obj instanceof jQuery ? obj : $(obj);return {}}},"Combo":{parseOptions:function(obj){var $obj = obj instanceof jQuery ? obj : $(obj);return {value:$obj.val(),readOnly:/(readonly)|(true)/i.test($obj.attr("readOnly")) ? true : false,dataSource:$obj.attr("dataSource"),inputField:$obj.attr("inputField"),optionField:$obj.attr("optionField") || "text",valueField:$obj.attr("valueField") || "value"}}},"NumberField":{parseOptions:function(obj){var $obj = obj instanceof jQuery ? obj : $(obj);return {allowDecimals:/true/i.test($obj.attr("allowDecimals")) ? true : false,allowNegative:/true/i.test($obj.attr("allowNegative")) ? true : false,decimalPrecision:$obj.attr("decimalPrecision")}}},"Panel":{parseOptions:function(obj){var $obj = obj instanceof jQuery ? obj : $(obj);return {width:$obj.css('width'),height:$obj.css("height"),collapsed:$obj.attr("collapsed") == "true",collapsible:$obj.attr("collapsible") == "true" || $obj.attr("collapsed") == "true" || true}}},"Tabs":{parseOptions:function(obj){var $obj = obj instanceof jQuery ? obj : $(obj);return {}}}}return key ? setData[key] : setData;},omDocReady:function(){//$.om.omCombo.prototype.options.editable = false;$.extend($.om.omCombo.prototype.options,{ //改变下拉框的默认值forceSelection : true,filterDelay : 200,listMaxHeight : 200,inputField:"text",optionField:"text",valueField:"value"});$.om.omCalendar.prototype.options.editable = false;var sd = om.parse();$.each(sd,function(key,val){$(".oma-"+key).each(function(oid,odm){var $obj = $(odm);var conf = sd[key].parseOptions($obj);$obj["om"+key](conf);});})}
}```
[完整的DEMO](http://p2227.github.io/demo/applyLayout/playout.html)##HTML扩展方式与纯JS调用
一开始使用extjs的时候,推崇的是纯JS调用式的使用组件,即
```javascript
$("#id").Component({properties1:value1,properties2:value2
})
```
现在在项目实践中发现,easyui可以直接把属性定义在HTML上,通过源代码的察看发现,其实他们最终都是纯JS调用在起作用,但是直接定义在HTML上更加容易入门,对于项目中一些新手来说更加好用。反正经过我的封装,项目组的其他不太熟悉前端的人使用起来是方便了。

转载于:https://www.cnblogs.com/p2227/p/3541824.html

为operamasks增加HTML扩展方式的组件调用相关推荐

  1. springboot继承组件_SpringBoot如何扩展引入的组件,以及如何自动配置组件原理

    大家都知道,当我们创建SpringBoot项目之后,我们可以在pom文件下,引入我们想要启动的组件,当我们引入之后,SpringBoot会自动帮我们配置属性! 下面我们以SpringBoot引入Spr ...

  2. SQL与NoSQL区别-扩展方式

    扩展方式是NoSQL数据库与关系型数据库差别最大的地方. 由于关系型数据库将数据存储在数据表中,数据操作的瓶颈出现在多张数据表的操作中,而且数据表越多这个问题越严重,如果要缓解这个问题,只能提高处理能 ...

  3. React简介、虚拟DOM、Diff算法、创建React项目、JSX语法、组件、组件声明方式、组件传值props和state、组件的生命周期

    React简介: 前面只是简单介绍移动APP开发,后面还会继续深入介绍移动app开发:其中想要用ReactNative开发出更出色的应用,那么就得学好React,下面将介绍React: React 是 ...

  4. JAV spi 和扩展方式

    SPI 机制(Service Provider Interface)其实源自服务提供者框架(Service Provider Framework,参考[EffectiveJava]page6),是一种 ...

  5. 一种灵活可靠的工作方式:组件化设计与开发

    一种灵活可靠的工作方式:组件化设计与开发 2017/03/20阅读 6.9k 评论 3收藏 174 零基础学产品,BAT产品总监带,2天线下集训+1年在线课程,全面掌握优秀产品经理必备技能.了解详情 ...

  6. 常见的数据扩展方式unsqueeze与expand的用法与区别

    常见的数据扩展方式unsqueeze与expand的用法与区别 unsqueeze以及expand的区别 unsqueeze以及expand的区别 unsqueeze可以增加一个维度,但是维度的siz ...

  7. 系统扩展方式 scale up和scale out

    什么是scale up和scale out? 许多存储系统开始很简单,但当需要进行系统扩展时就会变得复杂.升级存储系统最常见的原因是需要更多的容量,以支持更多的用户,文件,应用程序或连接的服务器. 但 ...

  8. 系统扩展方式 scale up和scale out(转载)

    什么是scale up和scale out? 许多存储系统开始很简单,但当需要进行系统扩展时就会变得复杂.升级存储系统最常见的原因是需要更多的容量,以支持更多的用户,文件,应用程序或连接的服务器. 但 ...

  9. [亲测失败] Ubuntu 双显示器扩展方式 接显示器分辨率低的解决 [拼接整合]

    Ubuntu 10.04双显示器扩展方式,笔记本外接显示器分辨率低增加没有的分辨率. 使用扩展方式,但是外接的显示器没有认出来(未知),分辨率超不过笔记本的1366x768,原本外接显示器是19寸宽屏 ...

最新文章

  1. Oracle数据库中有关记录个数的查询
  2. linux 修改时区_【003】一文全面掌握Linux初始化进程(超详细)
  3. 13-3 14 NFS
  4. 7624:山区建小学
  5. Office安装源损坏
  6. 栈溢出笔记1.12 栈Cookie
  7. Django中的cookie与session
  8. 《游戏之旅-我的编程感悟》读书笔记
  9. android 8 wifi 信号等级
  10. Android学习笔记五:基本视图组件:Button
  11. 数据分析师的职场晋升
  12. 算法与数据结构之队列
  13. 为什么我的word一联网打开就很慢,不联网时打开却正常,打印设置问题导致office打开慢
  14. c语言s10 是什么意思啊,【S10】A.FortunatelyB.ComparativelyC.ConsequentlyD.Conversely - 试题答案网问答...
  15. l5630鲁大师跑分_鲁大师跑分详解-内存篇:内存跑分为什么比别人低?分数差在哪?...
  16. java使用easypoi导出为word文档
  17. Ubuntu有线连接不见,网络图标消失
  18. texworks注释掉多行latex代码
  19. 低成本[200元以下]打造分布式WIFI
  20. 理正地基基础计算机辅助设计的英文缩写,理正地基基础CAD系统教程

热门文章

  1. 霸榜Github第一!谷歌重磅开源的“海啸”,我服了
  2. 巧用Java8中的Stream,让集合操作6到飞起!!!
  3. Linux实时查看进程命令top笔记
  4. 程序员看了表示很开心
  5. 开发者入门,这几款小工具能让你事半功倍
  6. C# 实现HTTP不同方法的请求示例
  7. python爬虫面试题
  8. figma下载_素描vs Figma困境
  9. 【热点】React18正式版发布,未来发展趋势是?
  10. 初学者也能看懂的 Vue3 源码中那些实用的基础工具函数