VonPortal的頁面設計思路

在MVC架構中,咱們的頁面能夠經過三種方式進行加載,即RenderBody(),RenderAction()和RenderPartial(),其中RenderBody()主要是在系統主框架基礎上的加載,這個基本被主框架使用,對於模塊的加載沒有太大的價值,咱們在設計Portal時主要是考慮 RenderAction() 和 RenderPartial()。javascript

在Controller中也是同樣,若是是Action直接展現,咱們可能是返回View()而,Partial則是採用PartialView()返回。html

根據經驗咱們在設計模塊時要注意採用哪一種方式進行,下面是我根據本身的研發經驗積累制定的模塊研發原則:java

一、管理模塊:即須要Admin或高級管理權限的,不是對外發布或展示的,咱們通常採用固定皮膚的方式,即模塊中直接採用指定框架文件,並且一個頁面只包含一個管理模塊的運行,這樣簡化了頁面加載和管理技術,易於快速開發,節約人力和資源。關鍵是這部分頁面不對外,沒有其餘用戶使用,所以指定皮膚或框架是沒有太大問題的,通常客戶均可以接受;ajax

二、展示模塊:採用PartialView方式展示,首先要求本身不含有任何框架信息,即在cshtml文件中不指定本身的 layout 參數,而是等待皮膚加載後所用有的,這些模塊可能是採用動態加載的方式加載到界面中的,所以不能含有 layout 參數,不然會看到兩種頭信息的加載;展示模塊採用 return PartialView(...); 方式返回。架構

關於展示模塊的參數傳遞思路,因爲展示模塊可能在一個頁面中屢次加載,關鍵內容建議採用guid的變量進行命名,經常使用的方法以下:框架

在Controller文件中
public ActionResult Index()
{
  ViewBag.tagID = System.Guid.NewGuid();
  return View();
}
在界面文件中
<div id="@ViewBag.tagID">
... ...
</div>

這樣即解決了模塊的重複性,同時也解決了javascript的定位與調用。函數

關於ajax在頁面中的調用與加載,有些模塊設計的內容是經過ajax來調用生成的,這種模塊每每在加載初始中是空的,若是咱們在頁面加載時再經過ajax來調用,就會浪費不少系統時間和資源,這種模塊在設計時須要採用雙重加載模式,即頁面參數加載和ajax加載並存,當模塊加載時系統會在後臺處理中直接得到數據,經過 return View(data); 返給頁面,同時也支持ajax在運行過程當中替換掉原有內容,完成內容的ajax自動更新功能。ui

因爲界面中的模塊都是動態加載的,所以要求模塊的功能是單一的,例如新聞欄目和新聞列表及新聞內容是獨立的三個模塊,這樣就方便用戶經過頁面加載進行組合使用,但這三個模塊是相輔相乘的,這就須要創建一套客戶端的頁面模塊間通訊機制。this

下面是我經過javascript創建的一套頁面間模塊通信機制代碼:編碼

//javascript級信息交互功能,即聽口和說口間的信息傳遞
//能夠經過 $(function(){$.regListener("惟一編碼", "事件名稱", 回調函數);}); 回調函數聲明爲 function 回調函數(執行參數),來進行註冊,經過 $.sendPageMsg("事件名稱", 執行參數); 函數進行通信
(function ($) {
    var listeners = new Array();
    function listener(id, msgName, callback) {
        this.id = id;
        this.msgName = msgName;
        this.callback = callback;
    }
    $.regListener = function (id, msgName, callback) {
        for (arr in listeners) {
            if (arr.id == id && arr.msgName == msgName) return;
        }
        var obj = new listener(id, msgName, callback);
        listeners[listeners.length] = obj;
    }
    $.sendPageMsg = function (msgName, msg)
    {
        for (idx in listeners) {
            if (listeners[idx].msgName == msgName) listeners[idx].callback(msg);
        }
    }
})(jQuery);

這種機制會造成兩種通信模塊,即發送模塊和接收模塊:

發送模塊完成信息的發送,即經過發送來傳遞參數;

接收模塊接收到信息後,經過ajax完成信息的更新和展現;

經過這種機制就能夠完成信息的客戶端自動更新和變化。

這就要求接收模塊的啓動和加載時註冊本身,即聽口註冊,樣例代碼以下:

<script type="text/javascript">
    function loadNewsCallback(param)
    {
        $.ajax(...);
    }
    $(function(){
        $.regListener("news", "loadNews", loadNewsCallback);
    });
</script>

其中

$(function(){
        $.regListener("news", "loadNews", loadNewsCallback);
    });

完成了聽口的註冊,系統一旦收到 「loadNews」的信息就會調用 loadNewsCallback 完成頁面相應內容的更新。

發送就簡單不少了。

<script type="text/javascript">
    function eventOnClick(obj, id)
    {
        $.sendPageMsg("loadNews", id);
    }
</script>

在新聞列表中調用 eventOnClick 就能夠了,或者直接將 $.sendPageMsg("loadNews", id); 寫入列表的中項目的 onClick 事件中就能夠了。

相關文章
相關標籤/搜索