0

.select なしでクエリから dto->entity をマップしようとするたびに、同じエラーが発生します。

データの取得中にエラーが発生しました。オブジェクト [object Object] のプロパティ 'entityAspect' は関数ではありません

Breeze + Durandalを使用してSPAで作業しています。クエリの方法は次のとおりです。

var getTratamentoByPacienteId = function (pacienteId, tratamentoObservable) {
        var query = entityQuery.from('Tratamentos')
            .where('pacienteId', '==', pacienteId)
            .expand("Cardapios.Refeicoes.TipoRefeicao, Cardapios.Refeicoes.ItensRefeicao.Alimento, Cardapios.Refeicoes.ItensRefeicao.UnidadeMedida");

        var result = manager.executeQuery(query)
            .then(querySucceeded)
            .fail(queryFailed);
        return result;

        function querySucceeded(data) {
            var list = partialMapper.mapDtosToEntities(manager, data.results, entityNames.tratamento, 'id');
            if (tratamentoObservable) {
                tratamentoObservable(list[0]);
            }
            log('Retrieved [Tratamento] from remote data source', data, true);
            return tratamentoObservable;
        }
    };

    function mapDtosToEntities(manager, dtos, entityName, keyName, extendWith) {
        return dtos.map(dtoToEntityMapper);

        function dtoToEntityMapper(dto) {
            var keyValue = dto[keyName];
            var entity = manager.getEntityByKey(entityName, keyValue);
            if (!entity) {
                // We don't have it, so create it as a partial
                extendWith = $.extend({}, extendWith || defaultExtension);
                extendWith[keyName] = keyValue;
                entity = manager.createEntity(entityName, extendWith);
            }
            mapToEntity(entity, dto);
            entity.entityAspect.setUnchanged();
            return entity;
        }

        function mapToEntity(entity, dto) {
            // entity is an object with observables
            // dto is from json
            for (var prop in dto) {
                if (dto.hasOwnProperty(prop)) {
                    entity[prop](dto[prop]); /*<- Error here*/
                }
            }
            return entity;
        }
    }
4

2 に答える 2

1

ワードのポイントは終わっていますが、あなたの質問の最初の部分に答えるために

.select なしでクエリから dto->entity をマップしようとするたびに、同じエラーが発生します。

Breeze が .select ステートメントで返すのはプロジェクション (単純な js オブジェクト) であり、エンティティではありません。あなたの場合、選択部分を省略すると、エンティティ (entityAspect プロパティを持つ) が返されます。

既存のケースでは、いくつかの方法でプロパティを削除できます。

delete entity.entityAspect // remove directly

または ko.mapping 経由:

dto = ko.mapping.toJS(entity,{'ignore':['entityAspect']); // add any other props to ignore array

トピックから少し外れますが、もう 1 つ覚えておくべきことがあります。プロジェクションはクライアントにキャッシュされません (ただし、プロジェクションに含まれるエンティティはキャッシュされます)。

于 2013-05-24T20:48:57.677 に答える