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查看全部路由。跨域