Knockout.js 在我的实体状态上可观察到的ko.computed不是动态的
我在asp.NETMVC项目中使用Breeze 我定义了以下计算函数:Knockout.js 在我的实体状态上可观察到的ko.computed不是动态的,knockout.js,breeze,Knockout.js,Breeze,我在asp.NETMVC项目中使用Breeze 我定义了以下计算函数: var isDetached = ko.computed(function () { if (rolling()) return rolling().entityAspect.entityState.isDetached(); }); 一个实体在第一次添加然后(立即)取消时被分离 基本情景: (1) 创建一个新的“滚动” >>entityState为“已添加” (2) 取消创建操作(datacon
var isDetached = ko.computed(function () {
if (rolling())
return rolling().entityAspect.entityState.isDetached();
});
一个实体在第一次添加然后(立即)取消时被分离
基本情景:
- (1) 创建一个新的“滚动”
- >>entityState为“已添加”
- (2) 取消创建操作(datacontext.cancelChanges)
- >>实体状态为“分离”
entityState.isDetached()的值时,该值似乎不是动态的。根据前面的基本场景,在步骤1之后,ko.computedisDetached()
为false(因为它已添加)。在步骤2之后,ko.computed仍然为false,但应该为true
如果我显式地获得如下值,它就会起作用:
if (rolling().entityAspect.entityState.isDetached())
...
知道为什么我的ko.computed不是动态的吗
谢谢。只有当敲除检测到计算的可观察值中使用的值已更改时,才会重新评估计算的可观察值。敲除只能检测观察到的变化。如果您在计算的可观察对象中使用了一个非可观察的变量,并且该变量改变了其值,那么Knockout将不会检测到它
要使计算出的可观测值起作用,其中使用的所有变量(可能改变值)都必须是可观测的。aaberg基本上是正确的。当然,您可以在计算中包含其他变量,但KO不会检测到它们已更改。。。这就是他的观点。。。以及你问题的根源
entityAspect
及其属性是不可见的。这是一个设计决策,而不是一个偶然的遗漏
如果我了解您是如何使用这些信息的,我可以推荐一种方法。当EntityState更改时会发生什么?当EntityState更改时,不会发生任何事情。但当用户单击“取消”按钮时,如果实体已分离(添加的实体在取消后变为分离的实体),则我希望返回列表(导航回)。对于我的案例,一个简单的解决方案是使用一个名为isDetached
的简单函数,而不是一个计算的可观测值。我同意你的解决方案,并且希望它比计算的可观测值更好:-)