摘要:直搗黃龍黃龍即黃龍府,轄地在今吉林一帶,應該是指長春市農安縣,為金人腹地。一直打到黃龍府。指搗毀敵人的巢穴。有人會說組合優于繼承的。的變更會自動更新依賴的組件。可以操作對象實例,的變更會自動更新組件,屬性設置方法調用。
刀耕火種
刀耕火種是新石器時代殘留的農業經營方式。又稱遷移農業,為原始生荒耕作制。
var TodoApp = Nuclear.create({ add: function (evt) { evt.preventDefault(); var textBox = this.node.querySelector("input"); this.option.items.push(textBox.value); }, installed: function () { var form = this.node.querySelector("form"); form.addEventListener("submit", this.add.bind(this), false); }, render: function () { return ""; } }); new TodoApp( { items: [] },"#container");TODO
{{#items}}
- {{.}}
{{/items}}
這種書寫方式依賴延續了jQuery時代的思維方式:
js里查找dom
js里綁定事件
在以前的文章里寫過,如果不使用組件化編程,js里查找dom以及在js里綁定事件可能會帶來如下問題:
浪費帶寬
用戶反饋無響應
腳本錯誤
頁面短暫錯亂
上面的書寫方式粗暴、原始、落后,即:刀耕火種。
石器鋤耕“石器鋤耕”是奴隸社會時期的主要耕作方式,這一時期農業已經有了很大的發展。
var TodoApp = Nuclear.create({ onRefresh: function () { this.form.addEventListener("submit", function (evt) { evt.preventDefault(); this.option.items.push(this.textBox.value); }.bind(this), false); }, render: function () { return ""; } },{ diff:false }); new TodoApp( { items: [] },"#container");TODO
{{#items}}
- {{.}}
{{/items}}
會發現,查找dom的代碼已銷聲匿跡。直接標記nc-id,就自動掛載在this下。
值得注意的是,傳入了第二參數關閉了DOM diff。關掉diff的結果就是,每次組件HTML會全部重新替換渲染,綁定的事件全部丟失,所以需要將綁定事件的代碼寫入onRefresh里,這樣每次重新渲染都會再綁定一次。
比刀耕火種先進一點:石器鋤耕。
黃龍:即黃龍府,轄地在今吉林一帶,應該是指長春市農安縣,為金人腹地。一直打到黃龍府。指搗毀敵人的巢穴。指殺敵取勝。
var TodoApp = Nuclear.create({ add: function (evt) { evt.preventDefault(); this.option.items.push(this.textBox.value); }, render: function () { return ""; } }); new TodoApp( { items: [] },"#container");TODO
{{#items}}
- {{.}}
{{/items}}
會發現,查找dom和綁定的代碼同時銷聲匿跡!!
需要使用input,直接標記nc-id為textBox,就可以this.textBox訪問
需要綁定事件,直接在HTML內聲明事件和回調onsubmit="add(event)"
也可以通過add(event,this)拿到event和觸發該事件的dom元素。
代碼通俗簡潔干凈直接,目的直觀明確。故:直搗黃龍。
子承父業宋·釋道原《景德傳燈錄·利山和尚》:“僧問:不歷僧只獲法身,請師直指。師云:子承父業。”
var TodoList = Nuclear.create({ render: function () { return "
TodoApp不過是TodoList的炎黃子孫,故TodoApp可以通過this._super訪問父輩。也可訪問父輩任何方法。有人會說:“組合”優于“繼承”的。一定要明白:OOP既能組合也能繼承,是不沖突的。且看下面例子。
萬夫一力明·劉基 《郁離子·省敵》:“萬夫一力,天下無敵。”
var TodoList = Nuclear.create({ render: function () { return "
前一個例子的繼承,這個例子是組合。不能說你的框架是Class base就不能使用組合,這是天大的誤解。而我依稀記得極限編程關于面向對象設計的推論是:優先使用對象組合,而不是類繼承。作為框架的設計者,雖然會有一些約束,但是如果連組合和繼承都不能共存,那就是設計的最大敗筆。
使用Nuclear既能繼承也能組合,關鍵看程序邏輯該怎么抽象和實現復雜度。
唐·孟郊《去婦》詩:“妾心藕中絲;雖斷猶牽連。”
var TodoList = Nuclear.create({ render: function () { return "
這個例子和上個例子的區別是:共用option。option的變更會自動更新依賴option的組件。
四海為家《漢書·高帝記》:“且夫天子以四海為家。”
var TodoApp = Nuclear.create({ add: function (evt) { evt.preventDefault(); this.option.items.push(this.textBox.value); }, render: function () { return ""; } }); var todo= new TodoApp( { items: [] }); todo.setNuclearContainer("#container");TODO
{{#items}}
- {{.}}
{{/items}}
且看上面的new TopApp沒傳第二個參數指定容器。后面使用setNuclearContainer指定容器。這個場景還是比較常見,創建游離態組件,后續根據需要指定容器。AlloyLever就是這么干的: https://github.com/AlloyTeam/AlloyLever/blob/master/src/js/main.js
如虎添翼三國·蜀·諸葛亮《心書·兵機》:“將能執兵之權,操兵之勢,而臨群下,臂如猛虎加之羽翼,而翱翔四海。”
var TodoApp = Nuclear.create({ add: function (evt) { evt.preventDefault(); this.option.items.push(this.textBox.value); }, render: function () { return ""; }, style: function () { return "h3 { color:red; } button{ color:green;}"; } }); var todoApp = new TodoApp({ items: [] }, "#container"); todoApp.option.items.push("Nuclear"); todoApp.option.items.push("Hello World!");TODO
{{#items}}
- {{.}}
{{/items}}
style方法內的樣式自會對自身生效,不會污染其他組件。可以操作對象實例option,option的變更會自動更新組件,屬性設置>方法調用。
雙向綁定的好處以前寫過一篇文章專門介紹,從上面的例子也能可出:
組件內部的代碼更簡潔
組件外部的代碼更簡潔
壁壘森嚴壁壘:古代軍營四周的圍墻;森嚴:整齊,嚴肅。原指軍事戒備嚴密。現也用來比喻彼此界限劃得很分明。
TODO
{{#items}}
- {{.}}
{{/items}}
不用擔心template標簽的兼容性問題,Nuclear幫你處理好了。支持所有現代瀏覽器(包括IE9+)。
Nuclear也在js里進行了動態插入了template { display: none !important; }。但是js還沒執行到且瀏覽器不兼容template的話,用戶會看到一閃而過的模板原始代碼。
所以為了避免IE9一閃而過的模板原始代碼直接顯示,建議在head中加入。
如果你像手Q hybrid應用那樣只需要兼容webkit的話,天生支持template,就不用加入上面的兼容樣式。
鬼斧神工《莊子·達生》:“梓慶削木為鐻,鐻成,見者驚憂鬼神。”
var TodoApp = Nuclear.create({ add: function (evt) { evt.preventDefault(); this.option.items.push(this.textBox.value); }, render: function () { return `人劍合一`; }, style: function () { return `h3 { color:red; } button{ color:green;}`; } });TODO
{{#items}}
- {{.}}
{{/items}}
劍修者最高境界,人既是劍,劍既是人,劍隨心發,人隨劍殺
var TodoApp = Nuclear.create({ add: function (evt) { evt.preventDefault(); this.option.items.push(this.textBox.value); }, render: function () { return ``; } });TODO
{{#items}}
- {{.}}
{{/items}}
Nuclear從出生,API簡單穩定,幾乎沒怎么變動,內部是實現在不斷的完善,API驅動非常重要,不能因為實現某些API困難而做任何妥協,比如讓使用框架的著多傳個參數、多調用一次方法,這都是設計的缺陷。
Nuclear就是不妥協的結果。因為簡單的設計,所以可以有很多強大的玩法,待續...
廣而告之Nuclear Github: https://github.com/AlloyTeam/Nuclear
加入Nuclear,一起讓組件化開發體驗更加愜意、舒適..
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79457.html
摘要:目前來看,團隊內部前端項目已全面實施組件化開發。層疊樣式保佑不要污染別的在前端,一般一個組件必須要有骨架和裝飾的以及邏輯。事件綁定條件判斷秒后改變,會自動變更。循環姓名年齡增加修改移除的變更也能監聽到,能夠自動觸發的變更。 目前來看,團隊內部前端項目已全面實施組件化開發。組件化的好處太多,如:按需加載、可復用、易維護、可擴展、少挖坑、不改組件代碼直接切成服務器端渲染(如Nuclear組...
摘要:每個框架類庫被大量用戶大規模使用都說明其戳中了開發者的剛需。但是未執行完的情況下發生人機交互雖然不會報腳本錯誤,但是嚴重影響用戶體驗開發者們被各種爽到之后,這個問題已經被拋到了九霄云外。 寫在前面 因為zepto、jQuery2.x.x和Nuclear都是為現代瀏覽器而出現,不兼容IE8,適合現代瀏覽器的web開發或者移動web/hybrid開發。每個框架類庫被大量用戶大規模使用都說明...
閱讀 3255·2021-10-27 14:20
閱讀 2530·2021-10-08 10:05
閱讀 1631·2021-09-09 09:33
閱讀 2906·2019-08-30 13:16
閱讀 1441·2019-08-29 18:34
閱讀 1176·2019-08-29 10:58
閱讀 1231·2019-08-28 18:22
閱讀 1229·2019-08-26 13:33