(function(window) { var Gitana = window.Gitana; Gitana.AbstractPersistable = Gitana.Chainable.extend( /** @lends Gitana.AbstractPersistable.prototype */ { /** * @constructs * @augments Gitana.Chainable * * @class Abstract base class for abstract objects and maps * * @param {Gitana} driver Gitana driver * @param {Object} [object] */ constructor: function(driver, object) { this.base(driver); // auto-load response if (object) { this.handleResponse.call(this, object); } }, /** * @EXTENSION_POINT * * Convert the json response object into the things we want to preserve on the object. * This should set the "object" property but may choose to set other properties as well. * * @param response */ handleResponse: function(response) { // remove our properties (not functions) Gitana.deleteProperties(this, false); // special handling - if response contains "_ref", remove it if (response["_ref"]) { delete response["_ref"]; } // copy properties Gitana.copyInto(this, response); // handle any system properties this.handleSystemProperties(response); }, /** * Gets called after the response is handled and allows the object to pull out special values from * the "object" field so that they don't sit on the JSON object */ handleSystemProperties: function(response) { // utilize the chainCopyState method in case the response is a Gitana object this.chainCopyState(response); }, /** * Hands back a cleanup, properties-only JSON simple object. */ json: function() { return JSON.parse(JSON.stringify(this)); } }); })(window);