Knotjs教程系列
....持續增加中
-------------------------
Hi,我是knot.js的作者,一個沉溺於編程近20年至今依舊樂此不疲的程序員。我的微博是 http://www.weibo.com/2018493034/profile,如果有什么問題,歡迎到微博上和我討論。
knot.js 這個項目其實兩年前就已經開始並且成型了,它的第一個版本實際上已經被我應用到自己的項目中已經一年有余,效果很不錯。不過由於一直忙於工作和小孩,再加上拖延症爆發,直到現在才將這個項目徹底重構完成,並架設了網站和撰寫了詳細的文檔。
knot.js 英文官方網站在這里:http://www.knotjs.com 很遺憾中文網站還未能有精力完成,如果你有意加入我幫助建設中文網站,請email knotjs@gmail.com
在中文網站建立之前,我會在這里用一系列博客向大家介紹knot.js。
Knot.js並不是簡單的“另一個”前端MVVM框架。 比較AngularJS,KnockoutJS等前輩,knot.js有很多創新和突破,下面我簡單介紹下knot.js的幾大優勢:
CBS
CBS是一種全新的前端開發方式。它的名字來自於“Cascading Binding Sheet”, 看起來是不是和“CSS”很像?實際上它的工作方式也和CSS非常相似,熟悉CCS的你幾乎不需要多少額外的成本就能學會。
就像CSS把樣式從HTML中提取出來使得網頁的可維護性得以大幅提高, CBS把混雜在HTML中的數據綁定邏輯提取出來,形成獨立的,結構化的CBS塊或者CBS文件,讓你的HTML和數據綁定邏輯清爽易讀。
下圖左邊是AngularJS的數據綁定配置實例片段,右邊是同樣功能的CBS化之后的knot.js配置實例片段,knot.js明顯清爽很多。隨着項目的變大和變復雜,CBS帶來的優勢將會十分顯著。事實上去年讓我冒險將完全不成熟的knot.js應用於項目的主要原因就是我實在無法抵擋CBS帶來的誘惑。 相信你只要嘗試一下CBS也會有類似的感受。
自動數據感知
Knot.js的另一項特色是數據自動感知功能。 傳統MVVM框架為了實現數據感知(偵測數據變化以修改UI),往往逼迫用戶按它的要求和規范編寫model/view model,你所熟悉的一切在框架里都變了,甚至一個簡單的計時器都得重新學習,全程學習曲線均相當陡峭。
Knot.js則幾乎不對你的model/view model做任何要求,哪怕是一個直白的json對象,knot.js也能自動建立雙向綁定。你以前所有的知識在knot.js中都有效,只需通過簡單地熟悉下Knot.js中寥寥的幾個概念,你就能迅速上手。
下圖左邊是AngularJS的代碼片段,右邊是使用Knot.js后的代碼片段。你應該能發現Knot.js的代碼和你平時寫的js代碼幾乎沒什么不同。
調試器
相信任何一個用過框架的程序猿都有過和框架搏斗的痛苦經歷。一個小小的配置錯誤,就能殺掉你一個下午的時間。 Knot.js希望改變這個現狀。所以我模仿了常見的CSS調試器開發了knot.js CBS調試器,使你能夠實時監控整個系統內各個HTML元素上的綁定狀態。knot.js調試器甚至還提供了CSS調試器常見的鼠標選取元素/元素高亮功能,讓你輕易定位自己想要監控的HTML元素。
knot.js調試器基本上把整個系統變成了一個白盒系統,所有的工作細節均能一覽無遺。你開發過程中的絕大多數問題都能通過調試器解決。
Knot.js還有這些優點
- 文件很小。壓縮后不過45k(不含debugger)。
- 快速。根據我的初步測試,knot.js僅略慢於直接使用jQuery操作DOM Tree,快過AngularJS。http://www.knotjs.com/performance/
- Knot.js功能齊全。雖然文件微小,但這是因為整個系統設計頗為簡潔。你需要的各種功能基本上knot.js都已經提供。
- 自由。knot.js在整個設計過程中十分注意程序員對系統的控制性。你幾乎可以在任何一個步驟介入,增加自己想要的邏輯。使用這個框架,你不會比直接使用jQuery多感受到多少限制。
- 免費。基於MIT License。
一些提示
- Knot.js 支持所有的主流瀏覽器,但不支持ie8及更早版本
- 這是Knot.js的第一個正式發布版本
- 雖然我會持續發表博客介紹Knot.js的方方面面,但在中文網站建立起來之前,你可能需要閱讀英文文檔獲得幫助。
一個例子
下面是一個簡單的例子,以期給你一個初步的直觀感受。 這個例子顯示一個文本框,輸入姓名,就能得到來自knot.js的問候。你可以訪問knot.js主頁試用: http://www.knotjs.com
你可以立即訪問 http://www.knotjs.com/tutorial/ 開始學習使用knot.js。
HTML
1 <div class="knot_example"> 2 3 <!-- 清晰干凈的HTML,維護便利 --> 4 5 <h3>Greeting from knot.js</h3> 6 <p> 7 <label>Input your name here: </label> 8 <input type="text"> 9 </p> 10 <p> 11 <b id="helloString"></b> 12 </p> 13 </div> 14
CBS
1 /* 2 這段CBS吧文本框的value屬性綁定到#helloString的text屬性 3 文本框的輸出將被加上"Hello" 再輸出到 #helloString.text 4 "[immediately:1]" 這個選項告訴knot.js每一次擊鍵都要更新數據。 5 */ 6 .knot_example input{ 7 value[immediately:1] > {return value? ("Hello " + value + " !"): ""} 8 : #helloString.text; 9 }
如果你對knot.js感興趣,請關注我以獲取后續更新提醒。同時請點擊推薦此文,knot.js需要足夠的注意力來吸引開發者和建立自己的社區。
knot.js感謝你的支持。