X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=js%2Fcrm.backbone.js;h=746ddaf7be3559ee8aa0d9529885de9a8b85d71a;hb=6994c77d3f14c20bc0454cd83897271d0574c237;hp=01ec9e847ab8ef1c81fd7714ad38c12354a6cb35;hpb=2909e9cf6da2fc24e68c0d86060d1d1b2315fab1;p=civicrm-core.git diff --git a/js/crm.backbone.js b/js/crm.backbone.js index 01ec9e847a..746ddaf7be 100644 --- a/js/crm.backbone.js +++ b/js/crm.backbone.js @@ -70,7 +70,14 @@ switch (method) { case 'create': // pass-through case 'update': - CRM.api(model.crmEntityName, 'create', model.toJSON(), apiOptions); + var params = model.toJSON(); + params.options || (params.options = {}); + params.options.reload = 1; + if (!model._isDuplicate) { + CRM.api(model.crmEntityName, 'create', params, apiOptions); + } else { + CRM.api(model.crmEntityName, 'duplicate', params, apiOptions); + } break; case 'read': case 'delete': @@ -111,6 +118,16 @@ crmEntityName: crmEntityName, toCrmCriteria: function() { return (this.get('id')) ? {id: this.get('id')} : {}; + }, + duplicate: function() { + var newModel = new ModelClass(this.toJSON()); + newModel._isDuplicate = true; + if (newModel.setModified) newModel.setModified(); + newModel.listenTo(newModel, 'sync', function(){ + // may get called on subsequent resaves -- don't care! + delete newModel._isDuplicate; + }); + return newModel; } }); // Overrides - if specified in ModelClass, replace @@ -156,11 +173,15 @@ // Defaults - if specified in ModelClass, preserve _.defaults(ModelClass.prototype, { isSaved: function() { - var result = !this.isNew() && !this._modified; + var result = !this.isNew() && !this.isModified(); return result; }, + isModified: function() { + return this._modified; + }, _saved_onchange: function(model, options) { if (options.parse) return; + // console.log('change', model.changedAttributes(), model.previousAttributes()); this.setModified(); }, setModified: function() {