2014-02-26 126 views
0

假設我使用標準SPA項目與Durandal。路由與pushState:true。 而且一切都很好。如何防止Durandal在啓動時重新加載頁面?

但是,我想要生成完全準備好的頁面(即,在服務器(例如,ASP.NET MVC)上生成)(用於SEO優化,以及最小化流量)。即,頁面生成不在這裏:我只是使用服務器路由並生成適當的頁面 - 不是一個問題。 (例如,'mydomain.com/about/'頁面)。

一切都很好到目前爲止以及

但是。

現在,當加載頁面時,迪朗達爾明顯識別的「關於」頁面,開始從服務器加載它再次(在高速緩存的情況下,它沒有,但如果我需要實際數據,我的服務仍然會去獲取數據,這是額外的請求+時間)。

所以,問題是我怎麼能防止重裝簡單綁定視圖模型已經存在的HTML(已經呈現在服務器上,是當前加載頁面的一部分)?

(只是爲了澄清一遍:主要的是爲了防止頁面重複加載在啓動時)

謝謝!

回答

0

您可以嘗試自定義viewEngine;具體來說就是createView方法。

實際上,你必須預先檢查你的視圖是否已經加載,然後返回一個延遲的承諾,這將解決你的觀點;否則,返回默認值createView。沿着這些路線的東西:

define([ 
    "jquery", 
    "durandal/viewEngine" 
], 
function($, viewEngine) { 
    var defaultCreateView = viewEngine.createView; 

    viewEngine.createView = function(viewId) { 
     if (viewId == "about") { 
      // Some jQuery expression to find your view 
      var $about = $("#about"); 

      // Emulate what createView would have done when the view was loaded 
      $about.setAttribute("data-view", viewId) 

      // Return the view element as a resolved promise 
      return $.when($about); 
     } 

     // View is not loaded - defer to default createView implementation. 
     return defaultCreateView.call(this, viewId); 
    }; 
}); 
相關問題