代码之家  ›  专栏  ›  技术社区  ›  user2341148

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

  •  0
  • user2341148  · 技术社区  · 11 年前

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

    我阅读了Breeze上关于扩展实体的文档,但它们使用了敲除,而我使用的是Angular。

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

    然而,Breeze js会忽略它,因为它没有元数据。

    我需要在客户端上定义元数据,以便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);
    

    要用JSON中的实际值填充MyProp,需要做什么?

    2 回复  |  直到 11 年前
        1
  •  0
  •   Kostas Valais    11 年前

    如果camelCasing不是PWKad建议的情况,那么在这里查看breeze Angular SPA模板的微风文档 http://www.breezejs.com/samples/breezeangular-template 。该链接中有一个部分称为“在客户端上扩展实体定义”。

    如果我理解正确,您有一个“Merchant”对象,它具有“MyProp”计算的属性。试试这个

    store.registerEntityTypeCtor("Merchant",Merchant, merchantInitializer);
    
    function Merchant(){
     this.MyProp="";
    }
    
        2
  •  0
  •   Community CDub    8 年前

    嗯,这似乎是微风中的一个bug。实际上,您必须编辑微风.js文件才能使其工作。我从来没有想过这是一只虫子。

    我在这里找到了答案:

    Breeze Extended Entity Property Only Loads on Second Query

    更新:

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