国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于Nuclear的Web組件-Todo的十一種寫法

jayce / 419人閱讀

摘要:直搗黃龍黃龍即黃龍府,轄地在今吉林一帶,應該是指長春市農安縣,為金人腹地。一直打到黃龍府。指搗毀敵人的巢穴。有人會說組合優于繼承的。的變更會自動更新依賴的組件。可以操作對象實例,的變更會自動更新組件,屬性設置方法調用。

刀耕火種
刀耕火種是新石器時代殘留的農業經營方式。又稱遷移農業,為原始生荒耕作制。
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 "

TODO

    {{#items}}
  • {{.}}
  • {{/items}}
"; } }); new TodoApp( { items: [] },"#container");

這種書寫方式依賴延續了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 "

TODO

    {{#items}}
  • {{.}}
  • {{/items}}
"; } },{ diff:false }); new TodoApp( { items: [] },"#container");

會發現,查找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 "

TODO

    {{#items}}
  • {{.}}
  • {{/items}}
"; } }); new TodoApp( { items: [] },"#container");

會發現,查找dom和綁定的代碼同時銷聲匿跡!!

需要使用input,直接標記nc-id為textBox,就可以this.textBox訪問

需要綁定事件,直接在HTML內聲明事件和回調onsubmit="add(event)"

也可以通過add(event,this)拿到event和觸發該事件的dom元素。

代碼通俗簡潔干凈直接,目的直觀明確。故:直搗黃龍。

子承父業
宋·釋道原《景德傳燈錄·利山和尚》:“僧問:不歷僧只獲法身,請師直指。師云:子承父業。”
var TodoList = Nuclear.create({
    render: function () {
        return "
    {{#items}}
  • {{.}}
  • {{/items}}
"; } }); var TodoApp = TodoList.create({ add: function (evt) { evt.preventDefault(); this.option.items.push(this.textBox.value); }, render: function () { return "

TODO

" + this._super.render() + "
"; } }); new TodoApp({ items: [] },"#container");

TodoApp不過是TodoList的炎黃子孫,故TodoApp可以通過this._super訪問父輩。也可訪問父輩任何方法。有人會說:“組合”優于“繼承”的。一定要明白:OOP既能組合也能繼承,是不沖突的。且看下面例子。

萬夫一力
明·劉基 《郁離子·省敵》:“萬夫一力,天下無敵。”
var TodoList = Nuclear.create({
    render: function () {
        return "
    {{#items}}
  • {{.}}
  • {{/items}}
"; } }); var TodoApp = Nuclear.create({ install: function () { this.todoList = new TodoList({ items: [] }) }, add: function (evt) { evt.preventDefault(); this.todoList.option.items.push(this.textBox.value); this.refresh(); }, render: function () { return "

TODO

" + this.todoList.render()+ "
"; } }); new TodoApp( {},"#todo2Container");

前一個例子的繼承,這個例子是組合。不能說你的框架是Class base就不能使用組合,這是天大的誤解。而我依稀記得極限編程關于面向對象設計的推論是:優先使用對象組合,而不是類繼承。作為框架的設計者,雖然會有一些約束,但是如果連組合和繼承都不能共存,那就是設計的最大敗筆。
使用Nuclear既能繼承也能組合,關鍵看程序邏輯該怎么抽象和實現復雜度。

藕斷絲連
唐·孟郊《去婦》詩:“妾心藕中絲;雖斷猶牽連。”
var TodoList = Nuclear.create({
    render: function () {
        return "
    {{#items}}
  • {{.}}
  • {{/items}}
"; } }); var TodoApp = Nuclear.create({ install: function () { this.todoList = new TodoList(this.option) }, add: function (evt) { evt.preventDefault(); this.option.items.push(this.textBox.value); }, render: function () { return "

TODO

" + this.todoList.render()+ "
"; } }); new TodoApp( { items: [] },"#container");

這個例子和上個例子的區別是:共用option。option的變更會自動更新依賴option的組件。

四海為家
 《漢書·高帝記》:“且夫天子以四海為家。”
var TodoApp = Nuclear.create({
add: function (evt) {   
        evt.preventDefault();                
        this.option.items.push(this.textBox.value);
},
render: function () {
   return "

TODO

    {{#items}}
  • {{.}}
  • {{/items}}
"; } }); var todo= new TodoApp( { items: [] }); todo.setNuclearContainer("#container");

且看上面的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 "

TODO

    {{#items}}
  • {{.}}
  • {{/items}}
"; }, 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!");

style方法內的樣式自會對自身生效,不會污染其他組件。可以操作對象實例option,option的變更會自動更新組件,屬性設置>方法調用。
雙向綁定的好處以前寫過一篇文章專門介紹,從上面的例子也能可出:

組件內部的代碼更簡潔

組件外部的代碼更簡潔

壁壘森嚴
壁壘:古代軍營四周的圍墻;森嚴:整齊,嚴肅。原指軍事戒備嚴密。現也用來比喻彼此界限劃得很分明。


不用擔心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 `

TODO

    {{#items}}
  • {{.}}
  • {{/items}}
`; }, style: function () { return `h3 { color:red; } button{ color:green;}`; } });
人劍合一
劍修者最高境界,人既是劍,劍既是人,劍隨心發,人隨劍殺
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 Web組件化入門篇

    摘要:目前來看,團隊內部前端項目已全面實施組件化開發。層疊樣式保佑不要污染別的在前端,一般一個組件必須要有骨架和裝飾的以及邏輯。事件綁定條件判斷秒后改變,會自動變更。循環姓名年齡增加修改移除的變更也能監聽到,能夠自動觸發的變更。 目前來看,團隊內部前端項目已全面實施組件化開發。組件化的好處太多,如:按需加載、可復用、易維護、可擴展、少挖坑、不改組件代碼直接切成服務器端渲染(如Nuclear組...

    VPointer 評論0 收藏0
  • zepto/jQuery、AngularJS、React、Nuclear演化

    摘要:每個框架類庫被大量用戶大規模使用都說明其戳中了開發者的剛需。但是未執行完的情況下發生人機交互雖然不會報腳本錯誤,但是嚴重影響用戶體驗開發者們被各種爽到之后,這個問題已經被拋到了九霄云外。 寫在前面 因為zepto、jQuery2.x.x和Nuclear都是為現代瀏覽器而出現,不兼容IE8,適合現代瀏覽器的web開發或者移動web/hybrid開發。每個框架類庫被大量用戶大規模使用都說明...

    Rindia 評論0 收藏0
  • 系統潛入后門分析

    摘要:在這個案例里,這些是欺騙性的功能,它們似乎有一個唯一目的,即混淆自動檢測系統,反病毒軟件,或者那些甚至嘗試手工分析這些程序樣本的分析人員。受害機器的處于所規定的地址空間,攻擊者是無法通過到達的。 初始傳染手段?-?Nuclear?Pack 已經有一些其他的文章介紹過Nuclear?Pack破解工具包。可能它還不像g10pack或者BlackHole這些工具那么流行,也沒有像CoolE...

    forrest23 評論0 收藏0

發表評論

0條評論

jayce

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<