breeze中的manager.fetchMetadata()错误

breeze中的manager.fetchMetadata()错误,breeze,Breeze,我的目标是创建一个新类型的新实体,并将其推给经理 我已创建了新的实体类型: var newType = new breeze.EntityType({ shortName: "input" }); 为了能够创建此类型的新实体,我需要首先获取元数据: var entityManager = new breeze.EntityManager('api/Db'); entityManager.fetchMetadata(success, failed); func

我的目标是创建一个新类型的新实体,并将其推给经理

我已创建了新的实体类型:

    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:无法调用未定义的方法'then'”

为什么我会看到这个错误

fetchMetadata()是否尝试从某处获取http:元数据?我哪儿都没有。。那么如何创建元数据呢

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

        //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元数据是关于您必须使用的所有对象的信息。您可以从服务器端获取元数据,也可以自己创建元数据并使用它

如果要在breeze中使用服务器端对象,可以使用
var entityManager=new breeze.entityManager('api/Db')创建一个实体管理器其中api/db是您的asp.net控制器。此控制器应该有一个
Metadata()
方法,该方法返回
repository.Metadata()
。在js中调用
entityManager.fetchMetadata(),然后(成功,失败)
解决了
fetchMetadata()
的承诺后,变量
entityManager
的breeze元数据已满,您可以开始使用breeze在js中处理服务器端对象

但是您也可以在不使用服务器端任何元数据的情况下工作,并在js代码中动态创建元数据。您可以创建自己的元数据存储,并将其附加到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(...);
下面是来自breeze的一个工作示例,其中包含动态元数据 您可以单击“代码”按钮或直接去查看源代码

还可以查看breeze文档中的此链接