[Transaction] Sync mutation within transaction

This commit is contained in:
Pete Richards 2016-11-08 10:34:20 -08:00
parent 9578fb0cd8
commit 2708562872
2 changed files with 26 additions and 3 deletions

View File

@ -171,7 +171,9 @@ define([
function finishEditing(clonedObject) {
return domainObject.getCapability("editor").finish()
.then(resolveWith(clonedObject));
.then(function () {
return fetchObject(clonedObject.getId());
});
}
function onFailure() {

View File

@ -22,6 +22,8 @@
/*global define*/
define([], function () {
var MUTATION_TRACKER = new WeakMap();
/**
* Listens for mutation on domain objects and triggers persistence when
* it occurs.
@ -37,10 +39,29 @@ define([], function () {
if (!wasActive) {
transactionService.startTransaction();
}
var wrap = function(f) {
return function () {
if (MUTATION_TRACKER.has(domainObject)) {
MUTATION_TRACKER.get(domainObject)();
MUTATION_TRACKER.delete(domainObject);
}
return f();
}
}
if (!MUTATION_TRACKER.has(domainObject)) {
MUTATION_TRACKER.set(domainObject, domainObject
.getCapability('mutation')
.listen(function () {})
);
}
// add model to cache and keep cache up to date with listener
// remove listener and remove from cache on commit & on cancel.
transactionService.addToTransaction(
persistence.persist.bind(persistence),
persistence.refresh.bind(persistence)
wrap(persistence.persist.bind(persistence)),
wrap(persistence.refresh.bind(persistence))
);
if (!wasActive) {