如何在没有KO的情况下为未映射的实体属性扩展Breeze MetaData

时间:2013-09-21 16:53:49

标签: c# angularjs entity-framework-5 entity breeze

有一些关于此的帖子,但在我的项目中没有具体的内容。

我阅读了Breeze关于扩展实体的文档,但他们使用了淘汰赛,我使用的是Angular。

我在服务器上定义了一个自定义属性,它正在我的JSON中传递。

然而,Breeze js ingnores it因为它没有元数据。

我需要在客户端上定义元数据,以便Breeze可以读取属性。

到目前为止,这是我的客户端,但它不起作用。通过不工作...我的意思是当我用{{item.MyProp}}调用它时,屏幕上没有显示任何内容。但是,实际元数据中的所有其他属性都显示正常。

    configureBreeze();

var serviceName = 'api/Entity';

var manager = new breeze.EntityManager(serviceName);
manager.enableSaveQueuing(true);


var store = manager.metadataStore;

addMyPropType(store);

function addMyPropType(store) {
    store.registerEntityTypeCtor("Merchant", MyProp);
}

// custom Merchant constructor
var MyProp= function () {
    //'MyProp' is a server-side calculated property of the Merchant class
    // This unmapped property will be empty for new entities
    // but will be set for existing entities during query materialization
   this.MyProp= "test";
};

var dataservice = {
    store: store,
    List: List,
    Create: Create,
    ListDetail: ListDetail,
    Save: Save
};
return dataservice;

我准备好了NODB样本,但我确实有一个DB,它也使用了KO。

更新

确定。所以我找到了部分有用的东西。现在,默认值将显示在视图上。但是,JSON中的值未被填充。它始终使用默认值。

这就是我现在所拥有的:

var Merchant = function () {
    this.MyProp = "5";
};
store.registerEntityTypeCtor("Merchant", Merchant);

MyProp需要通过JSON的实际值填充什么?

2 个答案:

答案 0 :(得分:0)

如果不像PWKad建议那样使用camelCasing,那么请在http://www.breezejs.com/samples/breezeangular-template查看Breeze Angular SPA模板的breeze文档。该链接中有一个名为“在客户端上扩展实体定义”的部分。

如果我理解正确,您的“商家”对象带有“MyProp”计算属性。试试这个

store.registerEntityTypeCtor("Merchant",Merchant, merchantInitializer);

function Merchant(){
 this.MyProp="";
}

答案 1 :(得分:0)

好吧,这似乎是Breeze中的一个错误。您实际上必须编辑breeze.js文件才能使其正常工作。我从来没有想到这是一个错误。

我在这里找到了答案:

Breeze Extended Entity Property Only Loads on Second Query

<强>更新

今天我更新到了最新版本的breeze.js,这个bug已经不存在了。所以这基本上是无缘无故的痛苦。谢谢大家的帮助。如果由于某种原因无法更新,请使用上面的链接。