我试图设置微风,我不能让实体正确填写他们的数据属性(我在元数据中定义)。当我执行查询时,实体的所有数据属性都映射到...
,而不是我的服务器返回的内容(通过使用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()
导致我的数据属性在客户端和服务器之间切换时转换不正确。