シングルページアプリケーションを実装しています。
<div id="container"/>
を使用して html コンテンツをロードするコンテナ div ( ) がありますAJAX
。
// function that is overwritten by loadMenu functions
// and gets called before loading a new section
function unbindPreviousSection() { };
// load contacts
function loadContactsMenu() {
unbindPreviousSection();
unbindPreviousSection = function () { };
$.get("/Home/Contacts", function (data, status) {
if (status === "success") {
$("#content").html(data);
contactsMenu.bind();
unbindPreviousSection = contactsMenu.unbind;
}
});
};
// load profile
function loadProfileMenu() {
unbindPreviousSection();
unbindPreviousSection = function () { };
$.get("/Home/Profile", function (data, status) {
if (status === "success") {
$("#content").html(data);
unbindPreviousSection = function() {
// specific unbind methods for this menu
};
}
});
};
var contactsMenu = {};
(function () {
var viewModel = null;
contactsMenu.bind = function () {
viewModel = {
phones: ko.observableArray()
};
};
contactsMenu.addPhone = function (phone) {
viewModel.phones.push(phone);
};
contactsMenu.unbind = function () {
viewModel = null;
};
}());
メニューロード関数内unbind
で、以前にロードされたメニューのメソッドを内部的に呼び出します。
loadContactsMenu();
loadProfileMenu(); // internally calls contactsMenu.unbind();
データをロードする前に、unbindPreviousSection()
関数を呼び出して前のメニュー データを破棄します。
私の質問は:
viewModel
オブジェクト内の変数は、null に設定してもcontactsMenu
呼び出した後も保持されますか? contactsMenu.unbind()
(メモリリークが発生しますか?)
関数はメモリ変数contactsMenu.addPhone
に保存するクロージャを作成しますか(関数内で使用されるため)?viewModel