2013-08-23 26 views
0

我有我的佈局頁頭一個jQuery插件:的Javascript靜態變量,並使用不同的頁面

<script src="@Url.Content("~/Scripts/js/kendo.web.min.js")"></script> 
<script src="@Url.Content("~/Scripts/app/jsCommon.js")"></script> 
<script src="@Url.Content("~/Scripts/app/Layout.js")"></script> 

和我layout.js:

(function ($) { 
    var Layout = function (node, options) { 
     this.node = node; 
     this.options = $.extend({ 
      url: "" 
     }, options); 
     $(this.node).find('.HButton').bind('click', $.proxy(this.HButtonClicked, this)); 
    }; 

    Layout.prototype = { 
     constructor: Layout, 
     _loadBackground: function() { 
      debugger; 
      //load second now 'Common.currentTarget' have been lost 
      $(Common.currentTarget).removeClass(); 
      $(Common.currentTarget).addClass(".HButton_Selected"); 
     }, 

     HButtonClicked: function (e) { 
      debugger; 
      //load first 
      Common.currentTarget = e.currentTarget; 
     } 
    } 

    $.fn.Layout = function (options) { 
     return this.each(function() { 
      $(this).data('Layout', new Layout(this, options)); 
     }); 
    }; 

}(jQuery)); 

在另一邊,我有一個份額存儲庫JavaScript對象是這樣的:

function common() { 

} 

common.currentTarget = null; 

var Common = new common(); 

然後在其他頁面我觸發瞭如下事件:

<script> 
    $(document).ready(function() { 
    var layout = $("#layout").data("Layout"); 
    $(layout).trigger("_loadBackground") 
    }); 
</script> 

當HButton元素點擊發生在第一個我寫的對象裏面的「Common.currentTarget」,它保存成功的時候,我觀察的變量,但是當另一個頁面加載完全然後觸發事件「_loadBackground」「Common.currentTarget」的值已經丟失,我的問題是我如何定義一個像這樣的靜態變量在我的整個頁面中是永久的?

+0

您希望變量在更改頁面後保持填充狀態嗎?如果是這樣,你將不得不把它放入某種存儲器中。 –

回答

1

您可以從JavaScript設置一個cookie來存儲數據,然後從另一個頁面訪問該cookie。 Cookie可以在瀏覽器會話期間持續存在,也可以過期。對於HTML5,有local storage

+0

如果我使用localstorage存在任何副作用我認爲這是解決方案(但僅限於HTML5)? – kamiar3001

+1

@ kamiar3001它被廣泛使用和支持。有關兼容性表,請參閱http://www.quirksmode.org/html5/。有些瀏覽器可能會配置爲詢問用戶頁面是否可以存儲某些本地數據。會話存儲可能足以滿足您的需求,而不是持久的本地存儲。 – fred02138

+0

會話存儲只存儲文本,但Jquery對象怎麼樣? – kamiar3001

0

頁面更改或刷新時,卸載所有JavaScript數據。 JavaScript本身沒有辦法解決這個問題。您將不得不將數據發送到服務器。也許這樣做最簡單的方法是存儲在一個隱藏字段數據:

<input type="hidden" id="storable" /> 
.... 
document.getElementById("storable").value = // whatever value you want to store 

然後在服務器端,您可以將數據轉移到新的頁面。

如果您正在重定向客戶端,請改爲使用查詢參數。

+0

但是,如何在命名空間中定義一個靜態變量的OOP javascript呢?有可能我喜歡把它作爲一種設計模式來實現。 – kamiar3001

+0

@ kamiar3001不,如果您有興趣瀏覽Mozilla的Firefox源代碼,您可以看到每次頁面更改時都會卸載整個DOM。沒有辦法做到這一點。你可以做的是將所有東西放在一個頁面上,儘管這是一件嚴肅的事情,我不推薦它。無論如何,你仍舊會失去你的狀態。 –