|
(function(window, undefined){ |
|
|
|
window.Document = Backbone.Model.extend({ |
|
|
|
url: function () { |
|
|
|
var self = this, |
|
base = '/' + self.database; |
|
|
|
if (self.isNew()) |
|
{ |
|
return base; |
|
} |
|
|
|
return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + encodeURIComponent(self.id); |
|
}, |
|
|
|
parse: function (obj) { |
|
|
|
obj['_rev'] = obj['rev']; |
|
|
|
delete obj.rev; |
|
delete obj.ok; |
|
|
|
return obj; |
|
}, |
|
|
|
destroy: function (options) { |
|
|
|
var self = this; |
|
|
|
options || (options = {}); |
|
options.url = self.url() + '/?rev=' + self.get('_rev'); |
|
|
|
if (this.isNew()) return this.trigger('destroy', this, this.collection, options); |
|
var model = this; |
|
var success = options.success; |
|
options.success = function(resp) { |
|
model.trigger('destroy', model, model.collection, options); |
|
if (success) success(model, resp); |
|
}; |
|
options.error = wrapError(options.error, model, options); |
|
return (this.sync || Backbone.sync).call(this, 'delete', this, options); |
|
} |
|
|
|
}); |
|
|
|
window.Documents = Backbone.Collection.extend({ |
|
|
|
model: Document, |
|
|
|
parse: function (response) { |
|
return _.map(response.rows, function(obj){ |
|
obj.value['id'] = obj.value['_id']; |
|
delete obj.value._id; |
|
return obj.value; |
|
}); |
|
}, |
|
|
|
fetch: function(options) { |
|
|
|
options || (options = {}); |
|
options.data || (options.data = {}); |
|
|
|
_.extend(options.data, { |
|
key: '\"' + this.key + '\"' |
|
}); |
|
|
|
var collection = this; |
|
var success = options.success; |
|
options.success = function(resp, status, xhr) { |
|
collection[options.add ? 'add' : 'reset'](collection.parse(resp, xhr), options); |
|
if (success) success(collection, resp); |
|
}; |
|
options.error = wrapError(options.error, collection, options); |
|
return (this.sync || Backbone.sync).call(this, 'read', this, options); |
|
} |
|
|
|
}); |
|
|
|
var wrapError = function(onError, model, options) { |
|
return function(resp) { |
|
if (onError) { |
|
onError(model, resp, options); |
|
} else { |
|
model.trigger('error', model, resp, options); |
|
} |
|
}; |
|
}; |
|
|
|
})(window); |