From 431af3adbc0cf0e5ea6457a647fdc9ec5b15d51f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 27 Jan 2015 11:12:33 -0800 Subject: [PATCH] [Edit] Implement model cache Implement a cache to store domain object models, to allow the cache for individual objects to distinguish objects based on their parentage and avoid ambiguous Remove actions (WTD-473.) --- .../edit/src/objects/EditableModelCache.js | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 platform/commonUI/edit/src/objects/EditableModelCache.js diff --git a/platform/commonUI/edit/src/objects/EditableModelCache.js b/platform/commonUI/edit/src/objects/EditableModelCache.js new file mode 100644 index 0000000000..bcda83eab3 --- /dev/null +++ b/platform/commonUI/edit/src/objects/EditableModelCache.js @@ -0,0 +1,42 @@ +/*global define*/ + +define( + [], + function () { + "use strict"; + + /** + * An editable model cache stores domain object models that have been + * made editable, to support a group that can be saved all-at-once. + * This is useful in Edit mode, which is launched for a specific + * object but may contain changes across many objects. + * @constructor + */ + function EditableModelCache() { + var cache = {}; + + // Deep-copy a model. Models are JSONifiable, so this can be + // done by stringification then destringification + function clone(model) { + return JSON.parse(JSON.stringify(model)); + } + + return { + /** + * Get this domain object's model from the cache (or + * place it in the cache if it isn't in the cache yet) + * @returns a clone of the domain object's model + */ + getCachedModel: function (domainObject) { + var id = domainObject.getId(); + + return (cache[id] = + cache[id] || clone(domainObject.getModel())); + } + }; + + } + + return EditableModelCache; + } +); \ No newline at end of file