我正在尝试使用breeze EntityQuery和jsonResultsAdapter来使用像这样的第三方API(省略DataService设置):
var jsonResultsAdapter = new breeze.JsonResultsAdapter({
name: "eventAdapter",
extractResults: function (json) {
return json.results;
},
visitNode: function (node, queryContext, nodeContext) {
var entityTypeName = 'Event';
var entityType = entityTypeName && queryContext.entityManager.metadataStore.getEntityType(entityTypeName, true);
var propertyName = nodeContext.propertyName;
var ignore = propertyName && propertyName.substr(0, 1) === "$";
return {
entityType: entityType,
nodeId: node.$id,
nodeRefId: node.$ref,
ignore: ignore
};
}
});
var query = new breeze.EntityQuery("Events")
.using(jsonResultsAdapter);
return this.manager.executeQuery(query);
但是它返回了这个错误:“无法读取属性'$ type'的null ”
我认为EntityManager忽略了 .using(jsonResultAdapter)语句,它试图使用breeze.js中定义的默认jsonResultsAdapter:
ctor.prototype.jsonResultsAdapter = new JsonResultsAdapter({
name: "webApi_default",
visitNode: function (node, queryContext, nodeContext ) {
var entityTypeName = EntityType._getNormalizedTypeName(node.$type);
var entityType = entityTypeName && queryContext.entityManager.metadataStore.getEntityType(entityTypeName, true);
var propertyName = nodeContext.propertyName;
var ignore = propertyName && propertyName.substr(0, 1) === "$";
return {
entityType: entityType,
nodeId: node.$id,
nodeRefId: node.$ref,
ignore: ignore
};
}
不知道如何告诉breeze使用我的jsonResultsAdapter而不是默认的。
答案 0 :(得分:1)
从 v 1.2.7 开始,这已得到修复。
-----上一篇文章
好的,这是一个错误。它将在下一个版本中修复。
目前,我认为您可以使用dataService的jsonResultsAdapter。就是这样的事。
var ds = new DataService( { serviceName: yourServiceName, jsonResultsAdapter: yourAdapter });
var em = new EntityManager({ dataService: ds });
var query = new breeze.EntityQuery("Events")
return em.executeQuery(query);