2013-12-15 94 views
0

我使用客户端的一些属性扩展了我的服务器实体。 当从查询中获取数据时,我真的看到结果中的这些属性填充了正确的值。 当我更改扩展属性的值时,管理器不会跟踪此更改。 当我调用manager.rejectChanges()时,没有发生任何操作,我调试了代码,并在entityAspect.entityState(“Unchaged”)中看到,尽管我修改了属性。 如果我修改来自服务器实体的属性,那么每件事情都可以。BreezeManager不会跟踪扩展属性的更改

这是在我的服务器产品实体:

public class Product 
{ 
    public string Code {get;set;} 
} 

I extended the product in the client side with some others : 
var Product = function() {  
     this.kind = ko.observable(); 
    }; 

breeze.metadataStore.registerEntityTypeCtor("Product", Product); 

查询我得到这两个领域(代码,种类)后,如果我改变代码,实体状态被修改,我可以打电话manager.rejectChanges和它会生效,但如果我改变了什么都没有发生,那么实体状态就是“Unchaged”。 任何想法为什么会发生这种情况? 在此先感谢...

+0

微风追踪导航属性或你。 '扩展财产'是什么意思?正如你知道你需要显示一些代码.... –

+0

请参阅我更新的任务... – Wasim

+0

请参阅此问题以获得伟大的答案从病房如何正确地扩展您的实体 - http://stackoverflow.com/questions/19123781/breeze-js-is-there-a-way-to-query-entities-from-data-results –

回答

0

通过“扩展”我假设你的意思是“未映射”,这是为“Extending Entities

“未映射”属性不映射描述在自定义构造函数通常定义为永久性质存储在服务器上的值。因此,对未映射属性的更改不会影响EntityState,并且它们不会发送到服务器。

请注意,服务器可以在查询的有效负载中提供未映射属性的值,Breeze将相应地设置未映射属性。这是计算服务器上的非持久值并将它们传输到客户端上的实体的一种方法。

在未映射的属性在其他方面的行为像一个对应的属性客户端:

  • 符合模型库的语法(例如,它成为KO模型可观察到的)出口时
  • 连载
  • 验证规则适用
  • 提高propertyChange当值改变
  • 实体记得财产的“原值”
  • rejectChanges()将属性还原为原始值
+0

好的,谢谢,实际上,如果我调用entity.entityaspect.rejectchanges()它会恢复到原始值,但如果我打电话给manager.rejectchanges()它不是。所以这似乎很奇怪。通过映射的属性,我设法以两种方式来做到这一点。但任何方式,我设法解决与entity.entityaspect.rejectchanges()的问题。 – Wasim

+0

你所描述的“不可能发生”;-)。 'manager.rejectChanges()'和'entity.entityaspect.rejectchanges()'对'entity'具有相同的效果。没有区别。我必须假设这些变体的测试之间的路径中有一些代码是不同的。 – Ward

+0

你是否基本上说过,该属性必须来自服务器才能被跟踪但尚未映射? – DavidMIRV