如何在viewmodel的内部函数中访问外部函数observable?
问题描述:
我有内部的主要功能和子功能,如:如何在viewmodel的内部函数中访问外部函数observable?
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());
我需要inner
函数内value1
值应该是动态的。
我试图将它存储在一个变量中并访问它,但它不会解决我的情况,因为有一种情况,其中self.visibility
根本不会触发并动态更新。
Onload我得到一个更新的value1
所以一切都会工作,但我有一个按钮“goto next stage”,并点击该按钮我正在更新状态,即self.value1(2)
。此时self.visibility
应该更新,因为value1
有变化。
我试图通过一个简单的例子来展示我需要的东西,但实际上有一些更复杂的循环正在进行。
任何线索都会很棒。
答
为了您的计算机更新时self.value1更新你确实有使用它计算的函数内部
self.visibility = ko.computed(function(){
if(self.value1() == 1)
{return true;}
else
{ return false;}
});
}
最主要的原因,你的计算,是因为你使用数据到没有工作计算出这是一个简单的JS变量,这就是为什么它只更新onload,数据从来没有真正重新评估,所以你的计算从未得到更新。你需要使用的是一个ko.observable计算为正确更新!
另外一个注意:我没有看到你在计算中使用了内部函数的任何变量。如果真是这样,那么你可以简单地将计算结果传送给main函数。
编辑:由于我没有工作代码,不知道你如何使用这个内部函数,我不能创建一个工作示例只是指出问题。 self.value1将有范围问题,但你应该能够克服这一点,尝试将其作为变量传递,使用全局变量......无论哪个适用于你
不要忘记执行'value1',因为它是一个可观察的。另外,从你复制的问题来看问题:'else'位不返回任何东西,它只是“执行”false作为语句(并且函数将最终返回'undefined',这是伪造的,所以它可能没有被真正注意到)。 – Jeroen 2014-09-23 13:02:11
检查我的编辑。 '数据从来没有真正重新评估'现在它会但仍然是同样的问题,我不能让我的内部函数在运行中更新'数据'。 – 2014-09-23 13:05:15
'你在代码中提到的'icepick''如果(self.value1 == 1'不会工作,它会因为范围问题给出未定义的代码 – 2014-09-23 13:06:53