【问题标题】:manager.fetchMetadata() error in breeze微风中的 manager.fetchMetadata() 错误
【发布时间】:2014-05-14 23:43:22
【问题描述】:

我的目标是创建新类型的新实体并将其推送给经理。

我创建了新的实体类型:

    var newType = new breeze.EntityType({
        shortName: "input"
    }); 

为了能够创建这种类型的新实体,我需要先获取元数据:

var entityManager = new breeze.EntityManager('api/Db');
entityManager.fetchMetadata(success, failed);

function success(){
    var newEntity = entityManager.createEntity('input', {});
}

function failed(){}

问题是 entityManager.fetchMetadata(): "TypeError: Cannot call method 'then' of undefined"

为什么我会看到这个错误?

fetchMetadata() 是否尝试从某个地方 http: GET 元数据?我在任何地方都没有它.. 那么如何创建元数据呢?

更新: 以下建议我已将代码重写为:

        //create new entity type
        var newType = new breeze.EntityType({
            shortName: "input",
            autoGeneratedKeyType: breeze.AutoGeneratedKeyType.KeyGenerator
        });

        //add property
        var info = new breeze.DataProperty({
            name: "text",
            dataType: breeze.DataType.String,
            isNullable: true,
            isPartOfKey: true,
            maxLength: 20
        });
        newType.addProperty(info);

        //create metadata on fly
        var metadataStore = new breeze.MetadataStore();

        metadataStore.addEntityType(newType);

        var dataService = new breeze.DataService({
            serviceName: 'isdataservice',
            hasServerMetadata: false
        });

        var entityManager = new breeze.EntityManager({
            dataService: dataService,
            metadataStore: metadataStore
        });

        //create entry
        var entity = entityManager.createEntity('input', { name: "nnn" });

【问题讨论】:

    标签: breeze


    【解决方案1】:

    Breeze 元数据是有关您必须使用的所有对象的信息。您可以从服务器端获取元数据,也可以自己创建元数据并使用它。

    如果您想轻松使用服务器端对象,您可以使用var entityManager = new breeze.EntityManager('api/Db'); 创建一个实体管理器,其中 api/db 是您的 asp.net 控制器。这个控制器应该有一个Metadata() 方法,它返回repository.Metadata()。在js中你调用entityManager.fetchMetadata().then(success, failed);fetchMetadata()的promise解决后,变量entityManager的元数据被填满,你可以开始在js中使用你的服务器端对象了!

    但是您也可以在没有来自服务器端的任何元数据的情况下工作,并在您的 js 代码中动态创建它。您创建自己的 metadataStore,将其附加到 entitymanager。伪代码:

    var myMetadataStore = new breeze.MetadataStore();
    
    myMetadataStore.addEntityType({...});
    
    var dataService = new breeze.DataService({
                serviceName: 'demo',
                hasServerMetadata: false
    });
    
    var entityManager = new breeze.EntityManager({
                dataService: dataService,
                myMetadataStore: store
    });
    
    var entity = manager.createEntity(...);
    

    这是来自微风的工作示例,带有即时元数据http://www.breezejs.com/breeze-labs/breezedirectivesvalidation 你点击代码按钮或者直接去http://plnkr.co/edit/lxPAbIJmRaLmyagXQAFC?p=info查看源代码

    还可以查看微风文档http://www.breezejs.com/documentation/metadata中的此链接

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多