Qwrap jss
- 2. 提纲 节点 JS 数据的用途 节点 JS 数据的描述方式 另一种描述方式: JSS JSS 应用实例 QWrap 的 JSS 实现、局限、以及未来展望
- 3. 节点 JS 数据的用途 日期输入框 <input name=“birthday” type=“date”/> 够用吗? 看一下现实中,日期输入框有哪些交互参数: 这些参数事实上不是浏览器在用,而是给页面的 js 用的。 -----JS 根据这些参数,来实现相应的交互效果。
- 5. 节点 JS 数据的描述方式 自定义属性描述 <input id=“fromDate” dataType=“d” minValue=“2011-11-12”/> JS 偷加属性 <input id=“fromDate”/> <script>g(‘fromDate’).dataType=’d’; g(‘fromDate’).minValue:’2011-11-12’;</script> JQuery 的 data 方法 <input id=“fromDate”/> <script>$(‘#fromDate’).data({dataType:’d’,minValue:’2011-11-12’});</script> ECUI 格式(百度) <input id=“fromDate” ecui=“dataType:d;minValue:2011-11-12"> JSS 格式 <input id=“fromDate” data-jss=“dataType:’d’;minValue:’2011-11-12’"> 其它 ----- 批量定义
- 6. 节点 JS 数据的描述方式—批量 JQuery 的 data 方法 $(‘input.d’).data(‘dataType’, ’d’); $(‘input.birthday’).data(‘maxValue’,’2011-11-12’); QWrap 的 jss 方法 W(‘input.d’).jss(‘dataType’, ’d’); W(‘input.birthday’).jss(‘maxValue’,’2011-11-12’); 还有其它方式么? ---- 规则
- 7. 节点 JS 数据的描述方式—规则 <script> Jss.addRules({ “ .d”: {dataType:’d’, minValue:’2008-01-01’}, “ .n”: {dataType:’n’, minValue:0}, “ .email”: {dataType:’email’}, ‘ #fromDate’: {minValue:’2011-11-12’} }); Dom.ready(function(){ alert(W(‘#fromDate’).jss(‘dataType’)); }); </script> <input id=“fromDate” class=“d”> 规则的优点: 在元素产生之前,就可以定规则。 在获取数据时,再去配合规则。
- 8. 常见的几种 JSS 数据设置方式 <script> Jss.addRules({ “ .d”: {dataType:’d’, minValue:’2008-01-01’}, “ .n”: {dataType:’n’, minValue:0}, “ .email”: {dataType:’email’}, ‘ #fromDate’: {minValue:’2011-11-12’} }); </script> <input id=“fromDate” class=“d” data-jss=“errMsg:’ 日格输入有误’” > <script> W(‘#fromDate’). jss(‘d_lower’,’ 只能预订五日内的车票’ ); </script> 为什么叫 JSS ? CSS --- JSS ( 感谢屈屈 ) 一套“ HTML 元素”与“ JS 数据”之间的关联机制 Inline style ? CSS ? 与 css 方法
- 9. 方法介绍 Jss: addRule (selector,data) addRules (ruleDatas) removeRule (sSelector) getRuleData (sSelector) setRuleAttribute (sSelector, arrtibuteName, value) removeRuleAttribute (sSelector, arrtibuteName) getRuleAttribute (sSelector,arrtibuteName) JssTargetH: setJss (el, attributeName , attributeValue) removeJss (el, attributeName) getOwnJss (el, attributeName) getJss (el, attributeName) Retouch 出的 gsetter : getJss + setJss ? jss
- 10. 重点方法 JssTargetH.getJss getJss : function (el ,attributeName) /** * 获取元素的属性,优先度为: inlineJssAttribute > #id > @name > .className > tagName * @param {element} el 元素 * @return {any} 获取到的 jss attribute */
- 11. 小试牛刀之一 Valid 验证规则的前后端统一配置 rules: { ‘ @goDate’:{ dataType:’d’, errMsg:’ 请检查您的出发日期’ , reqMsg:’ 出发日期必填’ } ‘ @backDate’:{ dataType:’d’, errMsg:’ 请检查您的返程日期’ , reqMsg:’ 返程日期必填’ } } 前端除了在提交前验证,也可以依此数据渲染效果,例如在日期输入框后添加日期按钮。
- 12. 小试牛刀之二 Css 与 Jss 的配合 <script> Jss.addRule(‘. d ’, {dataType:’d’,minValue:’2008-01-01’}); </script> <style> . d {width:100px;} </style> 日期: <input class=“ d ” > 通过 class ,定义 css 展现,与 jss 代表的 js 交互
- 13. 小试牛刀之三 Switch 组件调用三部曲 <div id="picslide_1" class="picslide">...</div> <script type="text/javascript"> W('#picslide_1').switchable({ tabSelector : '>.switch-nav>li', viewSelector : '>.switch-content>li', autoPlay: true, supportMouseenter: true, mouseenterSwitchTime: 300 }); // 组件代码已为 ".picslide" 作好了 jss 定制,所以: W('#picslide_1').switchable(); </script> <div id="picslide_2" class="switchable picslide">...</div> <script type="text/javascript"> // 如果组件代码里已有 Dom.ready(function(){W('div.switchable').switchable();}); // 那我们是不是可以这样: //W('#picslide_2').switchable(); // 完全不用写页面 JS !!! </script>
- 14. JSS 未来展望 JS 针对节点的数据规范化 不再只是 data-xyz 一种新的传参方式 ajaxable / validatable / switchable / dragable ( 可交互,如何交互由组件决定 ) ajax() / validate() // 立即交互 // 交互特性都可以由 jss 来定义。让组件的使用更简单
- 15. 相关链接 QWrap : http://www.qwrap.com/ Jss 代码: https://github.com/wedteam/qwrap/blob/master/resource/js/dom/jss.js Jss 帮助 http://dev.qwrap.com/resource/js/_docs/_youa/?content=http://dev.qwrap.com/resource/js/_docs/_youa/qw/nodew/w.jss_.htm Valid/Switch 组件 http://dev.qwrap.com/resource/js/wagang/_index.html 友情链接 http://www.360.cn
- 16. JSS 的问题 单向 setJss 只定义数据,不主动触发与 jss 相关的任何展现 想逆向太复杂…… 单 selector 规则 只支持” #id” 、 ” @name” 、 ” .class” 、” tagName” 不支持” input.className” 式的组合 想组合有性能问题…… 更多。。。