2013-08-23 23 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。没有办法做到这一点。你可以做的是将所有东西放在一个页面上,尽管这是一件严肃的事情,我不推荐它。无论如何,你仍旧会失去你的状态。 –