Durandal视图正在另一个视图模型中访问具有相同名称的方法

时间:2013-07-01 15:36:11

标签: durandal

我有两个不同的虚拟机,每个虚拟机都有一些具有相同名称的功能,例如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选项。看起来关闭它可能会帮助我。但是,我很欣赏有关我的方法的任何其他反馈。

1 个答案:

答案 0 :(得分: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
}