如何在viewmodel中访问内部函数中的外部函数observable?

时间:2014-09-23 12:04:56

标签: knockout.js

我内部有一个main函数和子函数,如下所示:

var main= function () {
    var self = this;
    self.value1 = ko.observable("");
     var data =   self.value1();   
     self.revaluate = ko.computed(function(){ 
     data = self.self.value1(); // i am overwriting 
     });

    function inner(i1,i2)
    {
        var self= this ;

        self.id1=ko.observable(i1);
        self.id2=ko.observable(i2);
        self.value2 = ko.observable("");

        self.visibility = ko.computed(function() {
            if (data == 1) {return true;}
            else {false;}
        });
    }
}

ko.applyBindings(new main());

我需要value1函数中应该是动态的inner值。

我尝试将其存储在一个变量中并访问它,但它不会解决我的情况,因为有一种情况self.visibility根本不会触发并动态更新。

Onload我得到一个更新的value1所以一切都会有效,但是我有一个按钮“转到下一个阶段”,然后单击该按钮我正在更新状态,即self.value1(2)。此时self.visibility应更新value1

我试图在一个简单的例子中展示我需要的东西,但实际上还有一些更复杂的循环。

任何线索都会很棒。

1 个答案:

答案 0 :(得分:0)

为了让你的计算在self.value1更新时更新,你实际上必须在计算函数

中使用它
self.visibility = ko.computed(function(){
        if( self.value1() == 1)
            {return true;}
        else
           { return false;}
         });
        }

你的计算机不起作用的主要原因是因为你使用 数据 来计算计算机,这是一个简单的JS变量,这就是为什么它只更新了onload , 数据 从未实际重新评估,因此您的计算机永远不会更新。您需要使用的是 ko.observable ,以便计算得到正确更新!

另一个注意事项:我没有看到你在计算中使用了内部函数的任何变量。如果你真实的例子就是这种情况,你可以简单地将计算机转移到主函数。

编辑:因为我没有工作代码,并且不知道你是如何使用这个内部函数的,所以我无法创建一个工作示例只是指出问题。 self.value1会有范围问题,但你应该能够克服这个问题,尝试将其作为变量传递,使用全局变量......无论哪种方式都适合你