表現與資料分離;前台MVC

來源:互聯網
上載者:User

無意間看到一個web前端招聘要求:表現與資料分離

這名詞對我很陌生,我就去百度了下

因為有各種莫名其妙的需求,所以才會出現我們前端MVC這種莫名其妙的東西。。。

我們的html就是model,我們的css就是view,我們的js就是controller。

話不多說,先上一段代碼(原來的代碼,抄過來的):

 2 <head> 3     <title></title> 4     <script src="../jquery-1.7.1.js" type="text/javascript"></script> 5     <script type="text/javascript"> 6         $(document).ready(function () { 7             var end = $('#end'); 8             $('#pili').change(function () { 9                 var name = '';10                 var p = $(this).val();11                 if (p == '葉小釵') {12                     name = '刀狂劍癡';13                 }14                 if (p == '一頁書') {15                     name = '百世經綸';16                 }17                 if (p == '素還真') {18                     name = '清香白蓮';19                 }20 21                 end.html(name + p);22             });23         });24     </script>25 </head>26 <body>27     <select id="pili">28         <option value="葉小釵">葉小釵</option>29         <option value="一頁書">一頁書</option>30         <option value="素還真">素還真</option>31     </select>32     <div id="end"></div>33 </body>34 </html>

我們重新看看上面的代碼,很簡單的邏輯,select改變後變化end的值,好了現在需求發生改變:

① select變成使用input類比select

② 在手機上還是使用select算了

③ 總會有莫名其妙的需求,這個就是

好吧,現在的代碼你該怎麼寫呢?是不是會寫幾個代碼,或者你壓根不知道怎麼寫呢???於是看看我們的MVC的實現吧

PS:代碼是我可恥的抄的。。。。但我可是自豪的一個字一個字的敲的哦,竊知識不算偷......

 2 <head> 3     <title></title> 4     <script src="../jquery-1.7.1.js" type="text/javascript"></script> 5     <script type="text/javascript"> 6         $(document).ready(function () { 7             //定義一個controller 8             var piliController = { 9                 //選擇視圖10                 start: function () {11                     this.view.start();12                 },13                 //將使用者操作映射到模型更新上14                 set: function (name) {15                     this.model.setPerson(name);16                 }17             };18             piliController.model = {19                 piliKV: {20                     '葉小釵': '刀狂劍癡',21                     '一頁書': '百世經綸',22                     '素還真': '清香白蓮'23                 },24                 curPerson: null,25                 //資料模型負責商務邏輯和資料存放區26                 setPerson: function (name) {27                     this.curPerson = this.piliKV[name] ? name : null;28                     this.onchange();29                 },30                 //通知數據同步更新31                 onchange: function () {32                     piliController.view.update();33                 },34                 //相應視圖對目前狀態的查詢35                 getPiliAction: function () {36                     return this.curPerson ? this.piliKV[this.curPerson] + this.curPerson : '???';37                 }38             };39             piliController.view = {40                 //使用者觸發change事件41                 start: function () {42                     $('#pili').change(this.onchange);43                 },44                 onchange: function () {45                     piliController.set($('#pili').val());46                 },47                 update: function () {48                     $('#end').html(piliController.model.getPiliAction());49                 }50             };51             piliController.start();52         });53     </script>54 </head>55 <body>56     <select id="pili">57      <option value="葉小釵">葉小釵</option>58         <option value="一頁書">一頁書</option>59         <option value="素還真">素還真</option>60     </select>61     <div id="end"></div>62 </body>63 </html>

我們來看看這個神一樣的代碼。。。。我們一開始會認為他有這些問題:

① 代碼維護困難,至少我認為很困難

② 徒增複雜性,效能會有問題

③ 我並不能說服自己說自己懂了。。。。

於是我們就放棄了MVC啦,但是我們回過頭來好好審視下他,我們會發現不一樣的東西:

① 我們好像就在view中使用了選取器擷取dom,其它地方壓根不認識dom這個丫的。

② 我們的資料似乎在model中,我們可以隨意改變,但是並不會影響到我們dom

③ view和model是完全獨立的,我們的controller恰好把他們串聯起來了

看著這神奇的魔法,我似懂非懂的點了點頭,你妹的MVC還真他媽夠勁!!



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.