可能的错误:Breeze.js 1.5——除非指定一个';写';选项

可能的错误:Breeze.js 1.5——除非指定一个';写';选项,breeze,Breeze,我想我发现了一只虫子 刚刚更新到新的Breeze.JS v1.5,现在出现以下错误: Error: Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters. at dependentObservable (http://localhost:54663/Scripts/k

我想我发现了一只虫子

刚刚更新到新的Breeze.JS v1.5,现在出现以下错误:

Error: Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.
   at dependentObservable (http://localhost:54663/Scripts/knockout-3.2.0.debug.js:1712:17)
   at setDpValueSimple (http://localhost:54663/Scripts/breeze.debug.js:5083:5)
   at defaultPropertyInterceptor (http://localhost:54663/Scripts/breeze.debug.js:4945:13)
   at write (http://localhost:54663/Scripts/breeze.debug.js:16415:25)
   at dependentObservable (http://localhost:54663/Scripts/knockout-3.2.0.debug.js:1710:17)
   at proto.setProperty (http://localhost:54663/Scripts/breeze.debug.js:16454:13)
   at Anonymous function (http://localhost:54663/Scripts/breeze.debug.js:7918:21)
   at proto._updateTargetFromRaw (http://localhost:54663/Scripts/breeze.debug.js:7891:9)
   at updateEntity (http://localhost:54663/Scripts/breeze.debug.js:14782:9)
   at mergeEntity (http://localhost:54663/Scripts/breeze.debug.js:14755:13)
有什么办法可以快速解决这个问题吗

更新:这是我在breeze.debug.js的第5083行提出的修复方案:

rawAccessorFn(newValue);
if (ko.isWriteableObservable(rawAccessorFn))
    rawAccessorFn(newValue);
对此:

rawAccessorFn(newValue);
if (ko.isWriteableObservable(rawAccessorFn))
    rawAccessorFn(newValue);
不确定此修复程序是否存在任何潜在问题,但它对我有效:)

更新2:修复程序现在位于breeze.debug.js v1.5.1中的第5167行

更新3:修复程序现在位于breeze.debug.js v1.5.2中的第5191行


我们可以在源代码中实现此修复吗?

我们还没有更改breeze淘汰适配器已经有一段时间了。您以前运行的是哪个版本?

那么tho是一个未映射的属性,是吗?它的价值是如何确定的?通过计算其他属性和数据,是吗

那么,是谁在试图设置该值呢?你还是微风?如果有微风,在什么情况下

我问所有这些问题是因为我并不清楚,默默地忽略设置RO属性的尝试比抛出要好。在我看来,柯在告诉你一些重要的事情

如果breeze在某个内部阶段设置了您无法触摸的属性(例如,在查询结果处理或实体导入期间),我会做出这样的更改

在jsfiddle或plunker上进行一次小的修改将非常有帮助


谢谢。

我相信我们正在运行最新的1.4.x请向我们展示属性定义。它是您添加到实体中的客户端属性吗?它是服务器的只读属性吗?我这样问是因为我们试图了解它是如何成为KO计算属性的,以及为什么breeze负责对其进行写入。@Ward我们刚刚更新到新的1.5.1,并且已经加入并添加了上述修复(现在在第5167行)。为了回答您关于它如何进入其中的问题,我们使用metadataStore.registerEntityTypeCtor()Yes和Yes扩展实体添加的计算字段。这是实体的计算扩展,它使用实体上的属性来确定其值。我并不是在试图写我的计算机,而是在尝试写我的计算机(当初始化一个实体时),正如我在最初的文章中所描述的那样。breeze似乎没有考虑到在客户端用计算出的可观测值扩展实体的可能性。一旦我添加了这个“修复”,一切又好了:)