1

我有两个不同的虚拟机,每个虚拟机都有一些同名的功能,例如submitRow(). 如果我从其中一个视图开始并且不离开它,一切都很好,但是一旦我切换到新视图,该视图上的绑定似乎正在引用前一个 VM 上的函数。

显然我可以更改函数名称,但我想知道是否有更好的方法来处理这个问题,或者我什至在某处做错了什么。

我的作曲设置:

<!--ko compose: { 
model: router.activeItem,
afterCompose: router.afterCompose,
transition:'entrance',
cacheViews:true
}--><!--/ko-->

一个(简化的)虚拟机:

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 一样具有全局范围。我在您的示例中只看到一个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 回答