I'm trying to set up breeze and I can't get entities to correctly fill out their data properties (that I defined in metadata). When I execute a query, all of the data properties for the entity are mapped to ...
instead of what was returned by my server (data verified by checking the response with chrome developer tools). If I click the ...
it resolves to the default value of that property (usually null
or ""
). My question is: Why does Breeze seemingly understand its supposed to create an entity from the query results, but doesn't fill in the data properties for that created entity from the same results? Is there another step to resolving the data?
Below is all my relevant code for setting this up. I'm hoping someone can spot something I forgot or did wrong and let me know how to get this working as I've been stumped for a couple days.
In my routes file
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
Metadata Factory
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 }
Breeze included when my app starts
# 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) ->
# ...
])
Client-side controller
window.EventListCtrl = ($scope, BreezeService) ->
$scope.events = []
BreezeService.getEvents (err, events) ->
$scope.events = events
console.log '$scope.events', $scope.events
Console output
$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: (...)
breeze.NamingConvention.camelCase.setAsDefault()
that was messing everything up. Deleted that line and everything is smooth. – Justen