2

jsonResultsAdapterでbreezeEntityQueryを使用して、次のようなサードパーティ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);

ただし、次のエラーが返されます:「nullのプロパティ'$type'を読み取れません

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
        };
    }

デフォルトのものの代わりに私のjsonResultsAdapterを使用するようにそよ風に伝える方法がわかりません。

4

1 に答える 1

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);
于 2013-03-22T06:34:02.923 に答える