0

レイアウト ページのヘッダーに jQuery プラグインがあります。

<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" が失われました。私の質問は、このような静的変数をページ全体で永続的に定義するにはどうすればよいですか?

4

2 に答える 2

0

ページが変更または更新されると、すべての JavaScript データがアンロードされます。JavaScript 自体でこれを回避する方法はありません。代わりにサーバーにデータを送信する必要があります。おそらくこれを行う最も簡単な方法は、隠しフィールドにデータを保存することです。

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

次に、サーバー側でそのデータを新しいページに転送できます。

クライアント側をリダイレクトする場合は、代わりにクエリ パラメータを使用します。

于 2013-08-23T14:42:31.653 に答える