2011-06-23 56 views
14

當您使用帶有大量AJAX位的jQuery的MVC模型時,如何組織控制器,方法和視圖?AJAX和jQuery與MVC

問題1

你有一個單獨的控制器只是爲了AJAX調用,或者你的AJAX方法連同在一個單一的控制器你平時的非Ajax方法混?

問題2

如果你是混合AJAX和單個控制器的非Ajax方法,你有獨立的AJAX和非AJAX的方法,或者你將它們組合在一起(如果可能的話)和傳遞一個值(NULL或AJAX),它決定了普通視圖還是AJAX視圖傳回給瀏覽器。

問題3

如果你有50個不同的AJAX調用,並且每次調用需要的方法,而這又需要一個看法,我們最終以50點的方法和50次的控制器。這是不錯的MVC練習嗎?我可以想到共享單個視圖的控制器中的所有AJAX方法,其中視圖文件包含大小寫條件語句,並且視圖文件傳遞了一個參數,該參數確定將使用50個案例中的哪一個。有點像壓縮50次爲1

問題4

而不是有這麼多的意見(50次),你覺得呼應的輸出在控制器的方法,而不是在考慮什麼?這樣我們就不會有太多的意見。

順便說一句,我使用的是笨的PHP框架爲我的MVC模型

回答

10

問題1

我在到同一控制器混合Ajax和非Ajax代碼。這樣你的代碼就可以很容易找到。

問題2

我結合AJAX和非AJAX方法在一起。使得它更容易使用javascript Progressive Enhancement讓人們在無javascript環境仍然將張貼到同一控制器

問題3

你不應該有1個控制器50點的方法。每個功能都應該有一個控制器。所以一個用戶控制器,一個Foo控制器,一個控制器 - 所以你最終可能會有10個控制器,每個控制器有5個方法。這種方法屬於特定於其功能的類。我有單獨的看法,而不是一個大的看法。您不應該在視圖中使用LOGIC來確定顯示內容,這是控制器的工作。但是,一些控制器/方法可以返回相同的視圖等方法

問題4

或控制器不應該輸出HTML。使用視圖這是MVC的整個陰影分離代碼(控制器)視圖(渲染)的關注。有時候我的視圖只是返回JSON或XML,然後我使用Javascript模板來更新DOM。我的意見是按照時間順序返回HTML。例如窗體上的保存功能。如果成功,可能會返回一個布爾值。然後我的Javascript會隱藏或顯示一個DIV,具體取決於響應。

+0

順便說一句我正在使用MVC .NET所以YMMV的PHP – Daveo

+0

我有admincontroller,這有70個methods.my整個管理員使用一個控制器是壞的。在哪​​裏可以找到好的mvc架構。 – Gowri

3

問題1 - 爲AJAX單獨的控制器。如果您使用的是servlet,那麼您應該使用新的servlet 3.0支持異步支持。

http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html?page=2

問題2 - 由於我們使用單獨的控制器,這是不適用的。

問題3 - 您是否看到過有50個唯一調用沒有重疊功能的場景? 雖然您有50個AJAX調用,但可以在服務器端重複使用這些請求以提供這些請求。所以50個呼叫不等於50個方法。你可以用一個命令&來包裝每個請求,而不是一個可能失控的if else。

問題4 - 50次調用可能不等於50次。你也需要在這裏重用。你需要分離出你的視圖組件&。歸結爲設計。

3

當您進行jQuery AJAX調用時,jQuery會添加一個X-Requested-With HTTP標頭,您可以使用它來確定給定請求是否爲AJAX請求。考慮到這一點,在AJAX和傳統請求之間共享相同的控制器動作通常是合理的,建立一個模型,然後使用該模型爲傳統請求渲染視圖,或者使用AJAX的同一模型的JSON序列化表示進行響應要求。