-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathBackboneMongo.js
119 lines (115 loc) · 2.99 KB
/
BackboneMongo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
var Backbone = require("backbone");
require('backbone-callbacks').attach(Backbone);
var _ = require("underscore");
Backbone.sync = function(method, model, options){
var callback = function(err, resp){
if(err)
options.error(err);
else
options.success(resp);
}
var store = global.store.collection(model.collectionName);
switch(method) {
case "read":
if(model.id)
store.findOne({_id: model.id}, options, callback);
else
store.find(options.pattern || {}, options, callback);
break;
case "create":
store.save(model.toJSON(), options, callback);
break;
case "update":
var updateData = model.toJSON();
store.update({_id: model.id}, updateData, options, function(err, count){
if(err)
options.error(err);
else
options.success(updateData);
});
break;
case "delete":
store.remove({_id: model.id}, options, function(err, count){
if(err)
options.error(err);
else
options.success();
});
break;
}
return ;
};
exports.Model = Backbone.Model.extend({
idAttribute: "_id",
save: function(input, options) {
if(typeof input == "function") {
options = input;
input = null;
}
if(typeof options == "function") {
var callback = options;
options = {
success: function(model) {
callback(null, model);
},
error: function(model, err) {
callback(err);
}
}
}
Backbone.Model.prototype.save.call(this, input, options);
},
fetch: function(input, callback){
if(typeof input == "function") {
callback = input;
input = {
success: function(model) {
callback(null, model);
},
error: function(model, err) {
callback(err);
}
}
}
if(typeof input.success == "undefined" && callback)
input.success = function(model) {
callback(null, model);
}
if(typeof input.error == "undefined" && callback)
input.error = function(model, err) {
callback(err);
}
Backbone.Model.prototype.fetch.call(this, input);
},
destroy: function(input, callback){
if(typeof input == "function") {
var callback = input;
input = {
success: function(model) {
callback(null, model);
},
error: function(model, err) {
callback(err);
}
}
}
if(typeof input.success == "undefined" && callback)
input.success = function(model) {
callback(null, model);
}
if(typeof input.error == "undefined" && callback)
input.error = function(model, err) {
callback(err);
}
Backbone.Model.prototype.destroy.call(this, input);
}
},{
store : function(){
return global.store.collection(this.prototype.collectionName);
}
});
exports.Collection = Backbone.Collection.extend({},{
store : function(){
return global.store.collection(this.prototype.collectionName);
}
});