我们遇到了更新非标量复杂类型的问题。
我们的简化元数据如下所示
shortName: 'Table',
defaultResourceName: "/table",
dataProperties: {
name: { max: 50, required: true },
description: { max: 500},
columns: {complexType: 'Column', isScalar: false}
...
}
shortName: 'Column',
isComplexType: true,
dataProperties: {
name: { max: 50, required: true },
description: { max: 500 },
...
}
我们的后端是基于文档的nosqldb。
在UI中,我们以树状结构显示所有表及其列。用户可以单击表名称或列,并在属性编辑器中编辑它的属性。表和列具有单独的编辑器,即使它们在内部也是同一对象的一部分。
最初,当我们显示树时,我们只获取有限的数量。 json的dataproperties,只有那些需要在树中显示的。但是,当用户单击特定表或列时,我们从服务器获取整个表(列是复杂类型)并更新缓存以在编辑器中显示它们。
我们使用knockout作为模型库,因此所有属性都是可淘汰的观察者。我们将相同的breeze实体对象传递给这些编辑器的视图模型以及树。
如果用户点击树中的表,并在编辑器中编辑名称或描述,我们看到树中的表名也正在改变,因为它们都是相同的可观察对象。但是,当我单击树中的列名,并在编辑器中编辑列名时,我看不到更改会反映在树中。
我认为这里发生的事情是,当我从服务器中重新查询同一个对象以在编辑器中显示时,表名是一个简单的属性是用服务器中的新值更新的,但列名是是复杂对象的一部分,实际上被服务器中的新值替换,因为数组中的每个复杂对象都被替换。因此,树和编辑器似乎有不同的障碍。
有趣的是,如果在点击特定列并将其显示在编辑器中后,我将移动到另一个模块(我们正在使用spa),然后再次返回原始模块,然后如果我点击再次使用相同的列并更新名称,这次更改将反映在树中。但不是第一次。
这可能是一个错误,还是我错过了什么?有解决方法吗?
我们正在使用breeze js 1.5.6 谢谢!