2010-10-27 66 views
0

我剛開始在javascript客戶端調查mvc(JavaScript MVC)。一切都很好,直到我形成提交:)視圖部分不會這樣做,這很簡單。事件附加在Controller中,因此Controller是驗證表單數據的好地方,但我不確定我想讓我的Controller知道特定的服務器地址(要發佈我的表單),所以在Model中有一個方法會很棒,但是我不想讓我的模型知道我的表單(它實際上是html結構...)。javascript mvc和ajax表單提交

那麼,我對MVC概念有什麼想法?我也不確定我想要在Controller中序列化我的表單,然後將其作爲參數傳遞給我的模型。就目前而言,我唯一看到使模型獨立的選項是具有JavaScript結構(實體),它將由控制器填充(基於表單數據),並將傳遞給Model方法以保存在服務器上。非常smplified代碼:

Info = { 
    name, 
    address, 
    // 15 more properties 
    ... 
} 

InfoController = { 
    ... 
    onFormSubmit: function() { 
     ... 
     info.name = document.getElementById("info-name").value; 
     info.adress = document.getElementById("info-address").value; 
     ... 
     InfoModel.save(info); 
    } 
} 

InfoModel = { 
    ... 
    save: function(info) { 
     // here some code to setialize info object 
     // send it to server 
     ... 
    } 
} 

但它使我的代碼過於複雜(由一些端框架比較簡單的形式serizlization,只是將其發送..)。什麼是正確的選擇?

回答

2

只是回答我自己的問題。簡短的回答 - 是的,我的想法是正確的) 我看了一下JavaScriptMVC,注意到一個簡單的東西,我錯過了,一個簡單的函數可以開發,將創建基於窗體的JavaScript對象(他們有函數稱爲formParams執行這種類型的轉換)。這樣,我的控制器被簡化:

InfoController = { 
    ... 
    onFormSubmit: function() { 
     ... 
     var info = $infoForm.formParams(); 
     InfoModel.save(info); 
    } 
} 

現在它看起來並不那麼複雜,它的優點是,有一個地方(模型),它知道如何保存數據(確認; URL發送;一些其他的東西比如將這個實體添加到客戶端的'存儲'中;發起一個事件,創建一些新的東西;根據我們的需要做其他事情),如果我還有一個地方,或者控制流再次執行這個操作,再次寫這段代碼,它不依賴於表現形式(它是形式,還是僅僅是一組輸入,嚮導等)。模型也變得相當可重用。

實際上在使用這種方法之前,我們有類似的東西,但它不是那種結構化的(我的應用程序可以運行javascript的不同演示文稿之間)。