デュランダルとノックアウトを使用して、プロパティへのサブスクリプションに問題があります。基本的に、私のviewAttachedメソッドでは、ビューを初めてロードしたときに非常にうまく機能する観察可能なプロパティへのサブスクリプションがあります。2回目にビューをロードすると、サブスクリプション内のコードが実行されるため、いくつかの問題が発生しました(望ましくないこと)。コードは次のようなものです。
export var viewAttached = function (view) {
toDate.subscribe(function (newValue) {
isLoading(true);
return datacontext.getData(newValue).then(function () {
isLoading(false);
});
});
fromDate.subscribe(function (newValue) {
isLoading(true);
return datacontext.getData(newValue).then(function () {
isLoading(false);
});
});
}
サブスクリプション内のコードが現時点で実行され、ビューが 2 回目に読み込まれます。何が問題なのですか。ビューをアンロードするために、このプロパティのサブスクリプションを削除できるかどうかを知りたいです。それは可能ですか?ビューがいつアンロードされるかを知ることは可能ですか?. どんな助けも高く評価されます。
更新: Activate 関数でサブスクリプションを削除しようとしましたが (デュランダルのドキュメントを参照)、サブスクリプション コードはまだあります。
export function activate() {
//remove suscriptions
toDate.subscribe(function (newValue) {
//do nothing
});
fromDate.subscribe(function (newValue) {
//do nothing
});
}
更新: fromDate と ToDate は次のように宣言されています (私は typescript を使用しています)
export var fromDate = <any>ko.observable();
export var toDate = <any>ko.observable();
fromDate および toDate であり、 activate メソッドでデフォルトで設定されます。
function loadInitData() {
var focusDate = ko.observable(selectedDate);
fromDate(firstDayOfMonth(focusDate));
toDate(getLastDayOfMonth(focusDate));
loadFilterLookups();
loadRegistrations();
}
export function activate() {
loadInitData();
}