我在我的asp.net mvc项目中使用Breeze。
我定义了以下计算函数:
var isDetached = ko.computed(function () {
if (rolling())
return rolling().entityAspect.entityState.isDetached();
});
实体首次添加然后(立即)取消时为detached
(<1}}。
基本情景:
问题:当我尝试从我的计算出的挖掘可观察量中获取entityState.isDetached()
的值时,该值似乎不是动态的。从上一个基本场景开始,在步骤1之后,ko.computed isDetached()
为false(因为它已被添加)。在第2步之后,ko.computed仍然是假的,但它应该是真的。
如果我明确地得到这样的值,它就有效:
if (rolling().entityAspect.entityState.isDetached())
...
我知道为什么我的ko.computed不是动态的?
感谢。
答案 0 :(得分:1)
只有当Knockout检测到计算出的observable中使用的值发生了变化时,才会重新评估计算的observable。 Knockout只能检测可观察量的变化。如果你在计算的observable中使用一个不是可观察的变量,并且该变量改变了它的值,那么Knockout将不会检测到它。
要使计算的observable起作用,其中使用的所有变量(可能会改变值)必须是可观察的。
答案 1 :(得分:0)
aaberg基本上是正确的。当然,您可以在计算中包含其他变量,但KO不会检测到它们已经发生变化......这是他的观点......以及问题的根源。
entityAspect
及其属性不是可观察的。这是一个设计决定,而不是偶然的遗漏。
如果我了解您如何使用这些信息,我可以推荐一种方法。当EntityState发生变化时会发生什么?