2 つの異なる VM があり、それぞれに同じ名前の関数がいくつかあります ( submitRow()
. いずれかのビューから始めてそこから離れなければ問題ありませんが、新しいビューに切り替えると、そのビューのバインディングが前の VM の関数を参照しているように見えます。
もちろん、関数名を変更することもできますが、これを処理するためのより良い方法があるかどうか、またはどこかで何か間違ったことをしているのだろうかと思っていました。
私の作成設定:
<!--ko compose: {
model: router.activeItem,
afterCompose: router.afterCompose,
transition:'entrance',
cacheViews:true
}--><!--/ko-->
(簡略化された) VM:
define([...all my modules...],
function(router, app, utils, ol, config, usercontext, datacontext) {
var
/* VIEW-LEVEL VARIABLES */
currentUserName = ko.observable();
PIGCode = ko.observable("");
PIGCode.isValid = ko.observable(true);
// lots more variables...
/* DATA ACCESS METHODS */
getOrderData = function(callback) {
// get me my data...
};
// lots more methods...
return {
PIGCode: PIGCode,
getOrderData: getOrderData,
// all the other things I want to publicly expose
};
});
cacheViews
数週間前にドキュメントで読んだ後、以下のコメントで言及されているオプションを忘れていました。それをオフにすると助けになるようです。しかし、私のアプローチに関する他のフィードバックをいただければ幸いです。