成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

利用 ES6 的字符串模板和 JQuery 簡單理解 MVVM

kgbook / 1733人閱讀

摘要:把自己對這設(shè)計模式的理解整理并記錄,僅作自己以后查詢之用。是將視圖和數(shù)據(jù)分離之后,通過將數(shù)據(jù)和視圖進行綁定。一般是指模板,例如或者的字符串模板寫法如下然后通過插入中對于便是,是此指定的。

把自己對這MVVM設(shè)計模式的理解整理并記錄,僅作自己以后查詢之用。

先說前端為什么需要 MVVM 或者 FLUX。在我看來,是為了保證不那么優(yōu)秀的前端er在團隊中寫出不那么垃圾的代碼,即使確實十分垃圾,也不會污染到團隊中其他同事的代碼,其它的設(shè)計模式應(yīng)該也具有這種作用。

通過代碼對比理解MVVM

MVVM 是 Model-View-ViewModel (雙向數(shù)據(jù)綁定)的簡寫。不管是 MVVM 或者是 FLUX, 都強調(diào)的是視圖和數(shù)據(jù)的分離。MVVM 是將視圖和數(shù)據(jù)分離之后,通過 ViewModel 將數(shù)據(jù)和視圖進行綁定。

View 一般是指模板,例如 Handlerbars ,或者 ES6 的字符串模板,寫法如下:

let message = "hello,world!!"
let demo = `

${message}

`

然后通過 jQuery 插入 body 中

  $("body").html(demo)

對于 demo 便是 View,message 是此 View 指定的 Model。由于在這個例子中并沒有交互,僅僅只是為了說明視圖和模型, 所以并沒有 VM 部分。

下面的例子是一個完整的用 JQuery 實現(xiàn)的 MVVM 模式寫法

//------ Model
let model = {
  value: 1,
  fns: [],
  set: function(v) {
    this.value = v
    this.fns.forEach(fn => fn.call(this, this.value))
  },
  on: function(fn) {
    this.fns.push(fn)
  }
};


//------ View
let demo = `

${model.value}

` $("body").html(demo) //------ ViewModel $("input").on("keyup", function() { model.set($(this).val()|0) }) $("button#button1").on("click", function() { model.set(model.value + 1) }) model.on(function(value) { $("p").html(value) $("input").val(value) })

在這個例子中, input輸入的內(nèi)容會實時顯示在p標(biāo)簽中,而button被點擊之后,也會對p標(biāo)簽的值和input標(biāo)簽的值都做+1處理;如果我們按照通常的 jQuery 來處理的話應(yīng)該怎么做?

$("input").on("keyup", function() {
  let value = $(this).val()|0;
  $("p").html(value)
  $("input").val(value)
})

$("button").on("click", function() {
    let value = $("input").val()|0 + 1;
    $("p").html(value)
    $("input").val(value)
})

從這兩段代碼來看,并沒有太大區(qū)別,甚至下面一段代碼看起來更短。然而下面一段代碼將 視圖和模型的處理寫到了一起,試想一下,當(dāng)我們想再增加一個 -1 的button 呢?對于 MVVM的模式,只要再寫


$("button#button2").on("click", function() {
    model.set(model.value - 1)
})

即可。

而對于傳統(tǒng)的方式,還需要先取得當(dāng)前input值或p的值,然后再進行-1操作,最后還需要將input和p的innerHTML都修改一次。
隨著DOM的增加,處理難度的差距越來越大,越來越不容易理解,修改一次,如履薄冰。

通過這個小例子可以看出 MVVM 相對傳統(tǒng)的寫法的最大的優(yōu)勢:

視圖和模型的分離,視圖可以獨立模型進行開發(fā);只需約定模型的結(jié)構(gòu)即可。

雙向數(shù)據(jù)綁定,視圖和模型可以通過VM互相改變。

基于約定俗成的模式,可以將爛代碼控制在最小范圍內(nèi),也很難寫出爛代碼。

ps: 按照我的理解 Angular 中對于基礎(chǔ)的VM進行了封裝,所以在模板中綁定數(shù)據(jù)之后,數(shù)據(jù)更新,會自動更新視圖。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/85937.html

相關(guān)文章

  • JavaScript - 收藏集 - 掘金

    摘要:插件開發(fā)前端掘金作者原文地址譯者插件是為應(yīng)用添加全局功能的一種強大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內(nèi)優(yōu)雅的實現(xiàn)文件分片斷點續(xù)傳。 Vue.js 插件開發(fā) - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應(yīng)用添加全局功能的一種強大而且簡單的方式。插....

    izhuhaodev 評論0 收藏0
  • [譯] 前端攻略-從路人甲到英雄無敵二:JavaScript 與不斷演化框架

    摘要:一般來說,聲明式編程關(guān)注于發(fā)生了啥,而命令式則同時關(guān)注與咋發(fā)生的。聲明式編程可以較好地解決這個問題,剛才提到的比較麻煩的元素選擇這個動作可以交托給框架或者庫區(qū)處理,這樣就能讓開發(fā)者專注于發(fā)生了啥,這里推薦一波與。 本文翻譯自FreeCodeCamp的from-zero-to-front-end-hero-part。 繼續(xù)譯者的廢話,這篇文章是前端攻略-從路人甲到英雄無敵的下半部分,在...

    roadtogeek 評論0 收藏0
  • 前端練級攻略(第二部分)

    摘要:是文檔的一種表示結(jié)構(gòu)。這些任務(wù)大部分都是基于它。這個實踐的重點是把你在前端練級攻略第部分中學(xué)到的一些東西和結(jié)合起來。一旦你進入框架部分,你將更好地理解并使用它們。到目前為止,你一直在使用進行操作。它是在前端系統(tǒng)像今天這樣復(fù)雜之前編寫的。 本文是 前端練級攻略 第二部分,第一部分請看下面: 前端練級攻略(第一部分) 在第二部分,我們將重點學(xué)習(xí) JavaScript 作為一種獨立的語言,如...

    BWrong 評論0 收藏0
  • 個人分享--web前端學(xué)習(xí)資源分享

    摘要:前言月份開始出沒社區(qū),現(xiàn)在差不多月了,按照工作的說法,就是差不多過了三個月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來說,差不多到了轉(zhuǎn)正的時候,會進行總結(jié)或者分享會議那么今天我就把看過的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區(qū),現(xiàn)在差不多9月了,按照工作的說法,就是差不多過了三個月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來說,差不多到了轉(zhuǎn)正的時候,會進行總結(jié)或者分享會議!那么今天我就...

    sherlock221 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<