BreezeJS:在MetadataStore中更改枚举文本值

时间:2014-06-03 16:09:00

标签: angularjs breeze

我非常喜欢BreezeJS,并且很惊讶地看到我的Enum值显示为他们的文本值而不是他们的序数值!我希望能够做的是,在客户端,打开MetadataStore,获取枚举并修改它的文本属性以用于显示目的。

目前有可能吗?从我的研究来看,似乎没有,但我想知道是否有一个简单的解决方法。我尝试的所有内容都涉及大量的黑客攻击和服务器端属性,但无济于事,或者解决方案看起来过于复杂而且不值得获益。

2 个答案:

答案 0 :(得分:4)

以下是关于如何从another SO comment中的原始元数据中获取枚举值的说明。

枚举值在EF生成的元数据中可用,并发送到Breeze客户端。我同意Breeze应该自动接收它们并将它们放在某处,这样您就不必单独请求它们,也不必从传递给MetadataStore.fetchMetadata成功回调的原始元数据中提取它们。这是在我们的积压。

与此同时,你必须亲自拿到它们。有DocCode test显示如何:

/*********************************************************
* Can can get enum types from raw EF-generated metadata
* Related to feature request #2271: Extract enum values from server metadata
*************************************************************/
asyncTest("can get enum type from raw EF-generated metadata", function() {

    var serviceName = testFns.foosMetadataServiceName;
    var store = new breeze.MetadataStore();
    store.fetchMetadata(serviceName)
        .then(metaSuccess, metaFail).fail(handleFail).fin(start);

    function metaSuccess(rawMetadata) {
        ok(true, "foos metadata fetched");
        var enumType = rawMetadata.schema && rawMetadata.schema.enumType;
        if (enumType && enumType.name ==='Color') {
            var members = enumType.member;
            ok(members.length,
                "should have several members; members are: " + JSON.stringify(members));
        } else {
            ok(false, "metadata should have had one enumType, 'Color'.");
        }
    }

    function metaFail(error) {
        ok(false, "foos metadata fetch failed: " + error.message);
    }

});

答案 1 :(得分:0)

我们正在使用Breeze与NHibernate和魔杖来做同样的事情。为NHibernate生成的元数据是标准的微风元数据,不包含Schema部分。任何想法怎么做?

编辑:为了解决我们的问题,我在元数据中添加了所有使用过的枚举的列表(比如structuralTypes节点)。然后我们在检索元数据时将其缓存在客户端上。 https://github.com/lnu/breeze.server.net/commit/65ad687ad13c4dd9f4a6ab6a3ed09e407e2b58ec

由于