第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 MVC 里 Model 被監(jiān)聽(tīng), 每次更新操作就會(huì)導(dǎo)致界面被重新繪制, 也顯得很怪???

沒(méi)從 C++/Java 學(xué)起, 對(duì) MVC 和面向?qū)ο蟮睦斫膺€是后來(lái)慢慢積累起來(lái)的相對(duì)我覺(jué)得腳本語(yǔ)言各種范式各種靈活, 只是缺少面向?qū)ο蠼M織代碼的整齊呆板而且從前使用 DOM API 時(shí)候就覺(jué)得 DOM 就像一種數(shù)據(jù)類型,JS 操作數(shù)據(jù)同時(shí), 也在更改界面. 通過(guò)直接訪問(wèn)界面, 也能讀取數(shù)據(jù), 很強(qiáng)大對(duì)吧但我接觸 Backbone 一段時(shí)間, 困惑也覺(jué)得越來(lái)越多而從前靈活解決前端問(wèn)題的思路, 隨著 MVC 提出的分離有了各種阻礙, 或者不方便直接 JS DOM 操作吧MVC 在 Backbone 里是 Model 和 View-Controller 兩者分離, 另加上 Collection.每次 Model(Collection) 發(fā)生改變, View 重新渲染一次, 然后搞定或者 DOM 上的事件從 Controller 傳到 Model 里進(jìn)行一次改變, View 跟著改變好這樣其實(shí) jQuery 豐富的 DOM 操作就顯得無(wú)所用處如果在 Backbone 的應(yīng)用里加上大量的 DOM 操作, View 刷新時(shí)又變得尷尬為了性能, JS 在進(jìn)行 DOM 操作時(shí)會(huì)講操作全在 HTML 字符串里存儲(chǔ)好, 一次寫入可在 Backbone 里, 如果小的 item 也是 Model, 那么 render 也是分開(kāi)了自己做的我理解, 這樣兩者就不能夠很好地兼容, 至少有一個(gè)方面要打折扣了另一個(gè)功能是實(shí)時(shí)保存和更新, 純的 DOM 操作, JS 監(jiān)聽(tīng) DOM, 在背后保存數(shù)據(jù)很簡(jiǎn)單
查看完整描述

2 回答

?
一只萌萌小番薯

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊

最早的時(shí)候,業(yè)務(wù)很簡(jiǎn)單,我們寫樣的代碼。

  $.ajax({    url: 'http://ooxx.cn/getUser'
    success: function(user){      //進(jìn)行DOM操作
      $('#name').val(user.name);
      $('#email').val(user.email);
    }
  })

后來(lái),user 的字段越來(lái)越多。

  $.ajax({
    url: 'http://ooxx.cn/getUser'
    success: function(user){      //進(jìn)行DOM操作
      $('#name').val(user.name);      $('#email').val(user.email);      $('#address').val(user.address);      $('#phone').val(user.phone);      $('#blog').val(user.blog);      //可能還有更多的字段,并且DOM操作不一定這么簡(jiǎn)單只是值的修改
      //可能還要負(fù)責(zé)整個(gè)視圖是否出現(xiàn):比如 isVIP 為 false 時(shí),出現(xiàn)付費(fèi)引導(dǎo)等。
    }
  })

于是我們考慮將對(duì)象與模版進(jìn)行綁定,進(jìn)一步抽離

  $.ajax({
    url: 'http://ooxx.cn/getUser'
    success: function(user){
      rener(user);
    }
  })
  
  var render = function(obj){      //進(jìn)行DOM操作
      $('#name').val(user.name);      $('#email').val(user.email);      $('#address').val(user.address);      $('#phone').val(user.phone);      $('#blog').val(user.blog);
  }

只是簡(jiǎn)單的代碼封裝,整個(gè)結(jié)構(gòu)就清晰很多。但緊接著,我們開(kāi)始使用 websocket 來(lái)做界面的即時(shí)更新,于是代碼再次修改。

這是一個(gè)用戶列表

  
  socket = new WebSocket("ws://192.168.1.71:7070");
  socket.onmessage = function(data) {
      var obj = JSON.parse(data)      if(obj.action === "update"){
          render(userList);
      }
  }
  
  var render = function(obj){      //進(jìn)行DOM操作
      $('#name').val(user.name);      $('#email').val(user.email);      $('#address').val(user.address);      $('#phone').val(user.phone);      $('#blog').val(user.blog);
  }

很棒,接著我們想像到這個(gè) user 將會(huì)有非常多的 function,如果到處是 $("") 這樣的方式進(jìn)行DOM操作,如果有一天,HTML 上的 id/class 要稍變一下,那改起來(lái)就痛苦了。
把用戶這個(gè)做成 Model,加上 render(), showPhone(), sendEmail() 這樣各種的方法。將大大增加代碼的組織能力。

-------------------------

其實(shí)上面寫了這么多,只是想說(shuō)明,需求在不斷增加的時(shí)候,項(xiàng)目不斷變大的時(shí)候,原有的代碼組織無(wú)法滿足需要,需要站在各高的層次,將項(xiàng)目中常用的方法進(jìn)行抽離封裝。于是,便有了框架。

backbone 做得事很專注,充分發(fā)揮MVC的組織分層能力,繼續(xù)把DOM交給 jQuery 去做。

而更新的前端MVC框架,如:angularjs, emberjs 等,將 model 與 template(HTML) 進(jìn)行綁定,直接幫助你渲染,讓我們不用再關(guān)心渲染、DOM處理,而是把注意力集中在業(yè)務(wù)及交互處理上。

既然是框架,解決的必然是復(fù)雜的、復(fù)雜的事情。如果只是簡(jiǎn)單的幾個(gè)DOM處理,用框架肯定是太重太浪費(fèi)了。


查看完整回答
反對(duì) 回復(fù) 2023-05-03
?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

Backbone 基本沒(méi)有關(guān)于Dom 渲染的功能. 所以從jQuery角度講, 數(shù)據(jù)ajax過(guò)來(lái)后直接操作Dom 感覺(jué)很直觀,沒(méi)必要在重新定義一個(gè)model.

但是如果同樣的數(shù)據(jù)在同一個(gè)頁(yè)面多處使用呢? 同一個(gè)數(shù)據(jù)在多個(gè)頁(yè)面多出使用呢. 作為SPA,所以都在一個(gè)頁(yè)面上, 這樣把 ajax過(guò)來(lái)的數(shù)據(jù)抽象成一個(gè)model, 就比較方便.

但Backbone的view 沒(méi)有加入bind的功能, 所以感覺(jué)上還需要在view上監(jiān)聽(tīng)model變化再render刷新整個(gè)view. 建議使用 一個(gè)插件 modelbinder. 這樣數(shù)據(jù)變化后就不需要刷新整個(gè)view而是只更新某個(gè)屬性對(duì)應(yīng)的小dom, 一般就是span標(biāo)簽或某個(gè)input標(biāo)簽,這樣大大簡(jiǎn)化程序復(fù)雜度,代碼方便,而且性能更好.

backbone,由于沒(méi)有C, 整個(gè)都是view里面, 而view的設(shè)計(jì)有沒(méi)有集成模板和dom渲染,顯得有些不太好用.

所以其他的框架 例如angular js, knockout 都提出ViewModel的概念 就是數(shù)據(jù)綁定的概念,只要model變化了數(shù)據(jù), view會(huì)自動(dòng)變化,非常方便. 而backbone并沒(méi)有提供這些功能,而只是一個(gè)代碼組織的框架. angular 里面基本不在需要jQuery操作DOM, 就是數(shù)據(jù)和View是一體的. 數(shù)據(jù)和view是綁定的, 沒(méi)有在單獨(dú)操作dom的概念.


查看完整回答
反對(duì) 回復(fù) 2023-05-03
  • 2 回答
  • 0 關(guān)注
  • 294 瀏覽
慕課專欄
更多

添加回答

了解更多

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)