#为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上更加容易入门,对于项目中一些新手来说更加好用。反正经过我的封装,项目组的其他不太熟悉前端的人使用起来是方便了。

为operamasks增加HTML扩展方式的组件调用的更多相关文章

  1. 实战MEF(1):一种不错的扩展方式

    在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生成新的应用程序,然后再覆盖原来的程序.这样的扩展方式对于较小的或者不经常扩展和更新的应用程序来说是可以接受的,而 ...

  2. 实战MEF(1)一种不错的扩展方式

    在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生成新的应用程序,然后再覆盖原来的程序.这样的扩展方式对于较小的或者不经常扩展和更新的应用程序来说是可以接受的,而 ...

  3. 扩展 jquery miniui 组件实现自动查询数据

    主题 之前写过一篇文章分享了公司basecode查找数据后台是怎么实现的(http://www.cnblogs.com/abcwt112/p/6085335.html).今天想分享一下公司前台是怎么扩 ...

  4. 一步一步学习underscore的封装和扩展方式

    前言 underscore虽然有点过时,这些年要慢慢被Lodash给淘汰或合并. 但通过看它的源码,还是能学到一个库的封装和扩展方式. 第一步,不污染全局环境. ES5中的JS作用域是函数作用域. 函 ...

  5. jQuery插件主要有两种扩展方式

    jQuery插件主要有两种扩展方式: 扩展全局函数方式. 扩展对象方法方式. 扩展全局函数方式 扩展全局函数方式定义的插件,即类级别插件,可以通过jQuery.extend()来进行定义.定义格式为: ...

  6. MBR分区操作-增加、扩展、删除

    MBR分区操作-增加.扩展.删除 GPT分区参考 http://www.blogjava.net/haha1903/archive/2011/12/21/366942.html l  fdisk 显示 ...

  7. Unity3D编辑器扩展(四)——扩展自己的组件

    前面已经写了三篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 今天写第四篇,扩展自己 ...

  8. Spark:几种给Dataset增加列的方式、Dataset删除列、Dataset替换null列

    几种给Dataset增加列的方式 首先创建一个DF对象: scala> spark.version res0: String = .cloudera1 scala> val , , 2.0 ...

  9. 使用vue开发输入型组件更好的一种解决方式(子组件向父组件传值,基于2.2.0)

    (本人想封装一个带有input输入框的组件) 之前使用vue开发组件的时候,在遇到子组件向父组件传递值时我采用的方法是这样的: 比如子组件是一个输入框,父组件调用时需要获取到子组件输入的值,子组件通过 ...

随机推荐

  1. 【AStar】初赛第一场

    1. All X1.1 基本思路k和c的范围都不大,因此可以考虑迭代找循环节,然后求余数,判定是否相等.这题还是挺简单的.1.2 代码 /* 5690 */ #include <iostream ...

  2. HTML发展历史

    概述 HTML从1993到如今的发展,同时针对其以后的发展进行评测. HTML 语言作为网络语言标准规范,在计算机的发展史中有着不可或缺的地位.在HTML 上的成就也决定着一个时代的发展. 1.HTM ...

  3. Windows 桌面软件:不绑定bing搜索的缤纷桌面

    bing:世界上最好的壁纸提供商  ^.^一直垂涎着Bing的壁纸,总是想找机会来一番邂逅. 之前使用bing自家的缤纷桌面.这个软件缺点就是和bing搜索绑定太厉害,放在桌面上感觉那个黑色的条框很碍 ...

  4. 用FireMonkey写QQ皮肤

    这是运行在Windows平台的效果,同样不需要改一行代码就可以运行在Mac Os,并且效果完全相同: 用FireMonkey做界面速度非常快,其提供的Effect ,Filter,Animation等 ...

  5. UVa 10763 (STL) Foreign Exchange

    看到大神说location的值不会超过1000,所以这就简单很多了,用一个deg数组记录下来每个点的度,出度-1,入读+1这样. 最后判断每个点的度是否为0即可. 至于为什么会这样,据说是套数据套出来 ...

  6. POJ 2492 (简单并查集) A Bug's Life

    题意:有编号为1~n的虫子,开始假设这种昆虫是异性恋.然后已知xi 和 yi进行交配,根据已知情况分析能否推理出其中是否有同性恋 这道题和 POJ 1182 食物链 十分相似,不过在更新与父节点关系的 ...

  7. UVa 10020 (最小区间覆盖) Minimal coverage

    题意: 数轴上有n个闭区间[ai, bi],选择尽量少的区间覆盖一条指定线段[0, m] 算法: [start, end]为已经覆盖到的区间 这是一道贪心 把各个区间先按照左端点从小到大排序,更新st ...

  8. hdu 1429 胜利大逃亡(续) (bfs+状态压缩)

    又开始刷题了 题意:略过. 分析:主要是确定状态量,除了坐标(x,y)之外,还有一个key状态,就好比手上拿着一串钥匙.状态可以用位运算来表示:key&(x,y)表示判断有没有这扇门的钥匙,k ...

  9. HDU 1496 Train Problem I 火车问题1(桟,水)

    题意: 给出两个串,串中的数字i 代表编号为i的火车进入车站的顺序,车站如桟一样,先进后出.第二个串是火车出站的顺序,问若按照第一个串那样进站,是否有可能如第二个串一样的出站顺序?火车顶多9辆,即1- ...

  10. open行情

    日k线 只能取8年 1分钟K线 只能取五天 前复权K线出现负数的股价 后复权K线会出现上千的股价