Ich habe eine Angular-Anwendung mit Breeze und das hat eine gemeinsame EntityManager für meine verschiedenen Controller. Einige meiner Controller können erreicht werden, ohne eine Abfrage auszuführen, um den MetadataStore des EntityManagers vorzubelegen. Ich habe etwas von einer Startrichtung gefunden here sagen, um die Metadaten zu Beginn der Anwendung zu holen. Mein Projekt basiert auf der Angular-Breezejs-Vorlage und wenn ich versuche, das Folgende zu tun, bekomme ich Fehler, weil das Versprechen nicht vollständig gelöst ist, bevor etwas den Datenkontext verwendet.Breezejs, Wie fange ich Metadaten beim Start mit freigegebenen EntityManager
app.factory('datacontext',
['breeze', 'Q', 'model', 'logger', '$timeout',
function (breeze, Q, model, logger, $timeout) {
logger.log("creating datacontext");
configureBreeze();
var manager = new breeze.EntityManager("/api/app");
manager.enableSaveQueuing(true);
var datacontext = {
metadataStore: manager.metadataStore,
saveEntity: saveEntity,
getUsers: getUsers,
getUser: getUser,
createUser: createUser,
deleteUser: deleteUser
};
return manager.fetchMetadata()
.then(function() {
model.initialize(datacontext);
return datacontext;
})
.fail(function (error) {
console.log(error);
return error;
});
//Function definitions
Was ist die richtige Art zu blockieren, bis der Metadaten-Abruf abgeschlossen ist? Da es unnötig erscheint, zu prüfen, ob die Metadaten existieren, bevor jede Nicht-Abfrage-Funktion (einschließlich Entitäts-Erstellung) wie das Original-Poster der oben verlinkten Frage endete.
Dies sollte aktualisiert werden. fetchMetadata benötigt einen Dataservice-Parameter – cecilphillip
Nein, tut es nicht. Sie denken an die 'MetadataStore.fetchMetadata'. Dies ist der 'EntityManager.fetchMetadata'. – Ward