我非常喜欢BreezeJS,并且很惊讶地看到我的Enum值显示为他们的文本值而不是他们的序数值!我希望能够做的是,在客户端,打开MetadataStore,获取枚举并修改它的文本属性以用于显示目的。
目前有可能吗?从我的研究来看,似乎没有,但我想知道是否有一个简单的解决方法。我尝试的所有内容都涉及大量的黑客攻击和服务器端属性,但无济于事,或者解决方案看起来过于复杂而且不值得获益。
答案 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
由于