1

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数週間前にドキュメントで読んだ後、以下のコメントで言及されているオプションを忘れていました。それをオフにすると助けになるようです。しかし、私のアプローチに関する他のフィードバックをいただければ幸いです。

4

1 に答える 1

1

変数を不適切に定義しているため、コメントで言及されている @Yogesh のようにグローバルにスコープ設定されていると思います。あなたの例にはキーワードが1つしかvarありませんが、各変数宣言の後にコンマの代わりにセミコロンを入れています。

function () {
  var one = 1;   // function scoped
      two = 2;   // global scoped
      three = 3; // global scoped

  var four = 4,  // function scoped
      five = 5,  // function scoped
      six = 6;   // function scoped
}
于 2013-08-22T23:59:07.383 に答える