从 Breeze 查询返回的数据不会填充任何实体数据属性,我是否错过了连接 Breeze 的步骤?



我试图设置微风,我不能让实体正确填写他们的数据属性(我在元数据中定义)。当我执行查询时,实体的所有数据属性都映射到...,而不是我的服务器返回的内容(通过使用chrome开发人员工具检查响应来验证数据)。如果我单击...,它会解析为该属性的默认值(通常是null"")。我的问题是:为什么Breeze似乎明白它应该从查询结果中创建一个实体,但不为从相同的结果中创建的实体填充数据属性?解决这些数据还有其他步骤吗?

下面是我设置这个的所有相关代码。我希望有人能发现我忘记或做错了什么,让我知道如何让这个工作,因为我已经被难住了几天。


在我的路由文件
breezeMongo = require('breeze-mongodb')
database    = require '../database'
server.get "/v1/event", (req, res) ->
    query = new breezeMongo.MongoQuery(req.query)
    database (err, db) ->
        query.execute db, "events", (err, _event) ->
            if not err
                res.setHeader("Content-Type:", "application/json")
                res.send _event
            else res.send 404
<<p> 元数据工厂/em>
angular.module('metadata', [])
    # create a new metadataStore and define metadata
    .factory 'metadataManager', (breeze) ->
        createMetadataStore = ->
            store = new breeze.MetadataStore()
            fillMetadataStore(store)
            return store
        fillMetadataStore = (store) ->
            namespace = 'uTourney'
            keyGen    = breeze.AutoGeneratedKeyType.None
            helper    = new breeze.config.MetadataHelper(namespace, keyGen)
            addType   = (type) -> helper.addTypeToStore store, type
            DATE = DT.DateTime
            ID   = DT.MongoObjectId
            addType {
                name: 'Event'
                defaultResourceName: 'event'
                dataProperties:
                    _id:           { type: ID, isPartOfKey: true }
                    address:       { complex: 'Address', required: true }
                    admins:        { type: ID, isPartOfKey: true, hasMany: true }
                    creator:       { type: ID, isPartOfKey: true }
                    date_finished: { type: DATE }
                    date_started:  { type: DATE }
                    description:   { max: 2000, isNullable: true }
                    summary:       { max: 140,  isNullable: true }
                navigationProperties:
                    maker:
                        entityTypeName: "User"
                        associationName: "event_creator"
                        foreignKeyNames: [ 'creator' ]
            }
        return { newStore: createMetadataStore }

EntityManager Factory and Service

angular.module('Breeze', ["metadata", "breeze.angular"])
    # emFactory initializes dataservice and metadataStore for BreezeService
    .factory 'emFactory', (breeze, metadataManager) ->
        breeze.NamingConvention.camelCase.setAsDefault()
        breeze.config.initializeAdapterInstance "dataService", "mongo", true
        dataService = new breeze.DataService
            serviceName: 'http://localhost:9001/v1'
            hasServerMetadata: false
        metadataStore = metadataManager.newStore()
        metadataStore.addDataService(dataService)
        return {
            serviceName: dataService.serviceName
            newManager: -> return new breeze.EntityManager(dataService: dataService, metadataStore: metadataStore)
        }
    # BreezeService get injected into client-side controllers
    .factory 'BreezeService', (breeze, emFactory) ->
        manager = emFactory.newManager()
        EntityQuery = breeze.EntityQuery
        getEvents = (next) ->
            query = new EntityQuery('Event')
            success = (data) -> next null, data.results
            failed  = (err)  -> next err
            manager
                .executeQuery(query)
                .then(success)
                .catch(failed)
        return { getEvents: getEvents }

微风当我的应用程序启动

# My app includes the Breeze module which also pulls in breeze.angular 
app = angular.module("uTourney", ["services", "directives", "filters", "config", "Breeze"])
    .run( ['$rootScope', 'breeze', ($rootScope, breeze) ->
        # ...
    ])
<<p> 客户端控制器/em>
window.EventListCtrl = ($scope, BreezeService) ->
    $scope.events = []
    BreezeService.getEvents (err, events) ->
        $scope.events = events
        console.log '$scope.events', $scope.events
控制台输出

$scope.events [Object, Object]
        0: Object
            $$hashKey: "00D"
            _backingStore: Object
            _id: (...)
            address: (...)
            admins: (...)
            creator: (...)
            date_finished: (...)
            date_started: (...)
            description: (...)
            maker: (...)
            entityAspect: ctor
            name: (...)
            summary: (...)
        1: Object
            $$hashKey: "00E"
            _backingStore: Object
            _id: (...)
            address: (...)
            admins: (...)
            creator: (...)
            date_finished: (...)
            date_started: (...)
            description: (...)
            maker: (...)
            entityAspect: ctor
            name: (...)
            summary: (...)

由于我的数据模型的设置方式,我的emFactory定义中的breeze.NamingConvention.camelCase.setAsDefault()导致我的数据属性在客户端和服务器之间切换时转换不正确。

最新更新