我内部有一个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
。
我试图在一个简单的例子中展示我需要的东西,但实际上还有一些更复杂的循环。
任何线索都会很棒。
答案 0 :(得分:0)
为了让你的计算在self.value1更新时更新,你实际上必须在计算函数
中使用它self.visibility = ko.computed(function(){
if( self.value1() == 1)
{return true;}
else
{ return false;}
});
}
你的计算机不起作用的主要原因是因为你使用 数据 来计算计算机,这是一个简单的JS变量,这就是为什么它只更新了onload , 数据 从未实际重新评估,因此您的计算机永远不会更新。您需要使用的是 ko.observable ,以便计算得到正确更新!
另一个注意事项:我没有看到你在计算中使用了内部函数的任何变量。如果你真实的例子就是这种情况,你可以简单地将计算机转移到主函数。
编辑:因为我没有工作代码,并且不知道你是如何使用这个内部函数的,所以我无法创建一个工作示例只是指出问题。 self.value1会有范围问题,但你应该能够克服这个问题,尝试将其作为变量传递,使用全局变量......无论哪种方式都适合你