index.htmljavascript
<html> <head> <title>SBind</title> <script src="sbind.js"></script> </head> <body> <script> SBind.boot(); //启动SBind程序 history.hash = "main"; //跳到默认路由 </script> </body> </html>
main.jshtml
//定义main视图 SBind({ route: 'main', id: 'main', events: { 'click .goBack': 'goBack' //返回到上一视图 }, model: { title: 'SBind框架演示', text: '测试内容' }, template: '<component:header><div>{{= text }}</div>', onShow: function() { console.log('Hello World!'); }, goBack: function() { history.back(); } }); //定义header组件 SBind({ id: 'header', events: { 'click #goDetail': 'goDetail' //跳到详细说明页 }, model: { goback: '返回', detail: '详细' }, template: './header.html', goDetail: function() { SBind.navigate('detail'); } });
header.html前端
<div> <div class="goBack">{{- goback }}</div> <h1>{{- title }}</h1> <div id="goDetail">{{- detail }}</div> </div>
生成的htmlvue
<html> <head> <title>SBind</title> <script src="sbind.js"></script> </head> <body> <script> SBind.boot(); //启动SBind程序 history.hash = "main"; //跳到默认路由 </script> <div id="sbind_views"> <div sb-route="main" id="mian"> <div sb-component="header"> <div class="goBack">返回</div> <h1>SBind框架演示</h1> <div id="goDetail">详细</div> </div> <div>测试内容</div> </div> </div> </body> </html>
键名 | 类型 | 备注 |
---|---|---|
id | String | 惟一标识符,做为Component必填 |
route | String | 路由,做为View必填 |
events | Object | 定义事件 |
model | Object | 定义数据 |
template | String | 定义模板 |
onCreate | Function | SBind实例建立完成时执行一次 |
onInit | Function | 初次路由到达,对应view添加到html时执行一次 |
onShow | Function | 每次路由到达时执行 |
onHide | Function | 每次从当前路由离开时执行 |
<ul> <!-- 循环 --> {{each items as item i}} <li data-id="{{- item.id | filter}}"> <div>{{= item.title }}</div> <!-- 嵌套循环 --> {{each item as it j}} <p>{{= it.text }}</p> {{/each}} </li> {{/each}} </ul> <div class="toast {{= showClass}}"> {{# tips }} </div> {{if isButton}}<button>肯定</button>{{/if}}
支持委托的经常使用事件java
事件名称 | 说明 |
---|---|
click | 须要相似fastclick事件库处理300ms延迟,fastclick原理是在touchend使用stopImmediatePropagation阻止将要执行的click事件,并使用new Event建立点击事件促使当即执行。可根据其原理将300ms延迟提速功能写入SBind核心库,并收集现已不存在300ms问题的userAgent |
focusin<br>focusout | 火狐浏览器不支持该组事件,webapp多数webkit内核,可不考虑火狐。若是须要支持火狐,可在目标dom元素上绑定focus/blur事件,这两个事件不支持冒泡,即没法委托 |
input | 使用input事件,输入中文会遇到中文未进输入框,键码先上屏的问题,可监听compositionstart和compositionend处理中文输入 |
touchstart<br>touchmove<br>touchend | 该组事件通常组合使用,扩展为长按,左划,右划等事件 |
keydown<br>keyup<br>keypress | 通常使用input代替该组事件 |
change | 各大主流浏览器都支持 |
mousedown<br>mousemove<br>mouseup<br>mouseover | IOS手机不支持该组事件,移动端没有鼠标,SBind主要面向手机市场,可忽略该组事件的应用 |
(PS:之前用PHP作的CMS系统处理静态文件也使用按需处理的方式,很大程度的下降服务器IO操做。传统的CMS系统用户每次保存数据都会自动生成静态html,使用404方式可在访客访问时才生成html,即请求访问时系统拦截404并将静态url转为动态url,并生成html返回给访客,若是动态url也404才给访客返回404)web
不会,事实上分离事件更利于维护,只要在事件后面加上扼要备注,对应的dom便一目了然。算法
events: { 'click #goBack': 'goBack', //返回上一页面 'click #submit': 'pay', //支付 'input #telBox': 'filterNum' //电话只容许输入数字 }
指令的功能无非就是绑定属性、事件和处理判断、循环,早期的前端模板引擎没有指令处理这些问题也绝不费力,SBind的模板语法算是复古写法。gulp
建议路由与对应view文件同名,这样看文件名就了解了。若是是自动化构建的应用,一次性注册全部SBind实例,能够输出SBind.routingTable查看全部路由。跨域