簡單理解前端web開發的MVC模式

 

隨着前端Ajax興起、前端開發工做進一步劃分:js開發和ui頁面製做、另外從整個前端項目的清晰明朗以可擴展性角度來看,MVC的應用也愈來愈必要,特別是對大的項目。html

 例如 須要給一個頁面上的button註冊一個onclick事件。前端

         一、咱們能夠有以下最簡潔的寫法:(view和model control徹底混合)框架

<HTML>函數

<HEAD>性能

<TITLE> example </TITLE>ui

</HEAD>this

<BODY>spa

<input type="button" value="baidu" onclick="alert(this.value);"/>orm

</BODY>htm

</HTML>

         說明:如上寫法的好處:簡單、直接;嚴重的弊端:若是都是這樣寫法,頁面代碼很大的時候,修改js代碼還須要查找整個頁面,致使整個頁面很是混亂。 

         二、將html和js代碼進行適當分離:(view和model control在同一頁面適當分離)

         修改以上的寫法:

<HTML>

<HEAD>

<TITLE> example </TITLE>

</HEAD>

<BODY>

<input type="button" value="baidu" onclick="tipInfo(this);"/>

<SCRIPT LANGUAGE="JavaScript">

<!--

    function tipInfo(obj){

           alert(obj.value);

    }

//-->

</SCRIPT>

</BODY>

</HTML>

         這是將頁面上全部的js代碼操做放到<script></script>標籤中進行。使得js邏輯代碼相對集中,易於後期修改。

         可是咱們仍是須要在html標籤中寫tipInfo(this)的js調用代碼。即html和js仍然有混合。

         三、將html和js代碼完全分離:(view和model control徹底分離)

         修改寫法:

         視圖view的html代碼:

<HTML>

<HEAD>

<TITLE> example </TITLE>

</HEAD>

<BODY>

<input type="button" value="baidu" id="baidu"/>

 

</BODY>

<script src="example.js"></script>

</HTML>

         分離出來的模型model和控制control的綜合example.js代碼:

    var obj = document.getElementById("baidu");

    obj.onclick = function(){

           alert(this.value);

    }

         說明:button節點的操做和事件註冊等工做徹底與html頁面分離。可是仔細想一想,這還不是一個基於MVC的模式,control和model徹底混合在一塊兒。

         四、符合MVC框架的實現:(view、mode和control徹底分離)

         View視圖的view.html代碼:

<HTML>

<HEAD>

<TITLE> example </TITLE>

</HEAD>

<BODY>

<input type="button" value="baidu" id="baidu"/>

 

</BODY>

    <script src="model.js"></script>

<script src="control.js"></script>

</HTML>

         實現control控制功能的control.js代碼:

    function Get(id){

           return document.getElementById(id);

    }

    var UI = new Object();

    UI.register = function(id,even,fun,arr){

           if(Get(id)){

      Get(id)["on"+even] = function(){ fun(arr);};

    }

    }

    UI.register("baidu","click",tipInfo,[1,2]);

    /*

           第一參數:爲button節點id

           第二參數:爲須要註冊的觸發事件

           第三參數:事件觸發函數

           第四參數:須要傳遞的參數。

*/

         說明:control.js的代碼就是實現html頁面節點事件的註冊。使得節點的各類事件知道會觸發什麼函數去執行。

 

         具體的函數操做,能夠放到model模塊中執行,在model中,纔是真正處理邏輯操做。看model.js代碼:

    function tipInfo(arr){

           alert(arr[1]);

           //實現其餘組件功能,例如popup、form等。都屬於model模型

    }

總結:

         View:只管頁面的顯示和樣式展現

         Control:進行頁面節點事件的註冊和控制,以及頁面加載性能的實現。

         Model:真正的邏輯處理,

相關文章
相關標籤/搜索