-
Notifications
You must be signed in to change notification settings - Fork 2
/
AWatchedModel.js
89 lines (57 loc) · 2.06 KB
/
AWatchedModel.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
/**
* Abstract Watched model class
*
* @version 0.3.0
*/
define( ["./Observable","./ModelWatcher","./ModelList","./AModel"], function () {
"use strict";
/**
* @class app.AWatchedModel
*/
app.AModel.extend("app.AWatchedModel",
/* @static */
{
create: function(data){
if ( ( data instanceof Object ) && ( data.id !== undefined )) {
if( !app.ModelWatcher.has( this, data.id ) ) {
return new this(data);
} else {
return app.ModelWatcher.get( this, data.id );
}
}
},
update: function ( data ) {
//make some paranoia
if ( data instanceof Object && data.id !== undefined ){
if ( app.ModelWatcher.has( this, data.id ) ){
var model = app.ModelWatcher.get( this, data.id );
for (var param in data) {
var setter = "set" + model.Class._getMethodEnding( param );
if (undefined === model[ setter ] || typeof model[setter] !== "function") continue;
model[setter]( data[ param ] );
}
}
}
},
factory: function( data ) {
var model = app.ModelWatcher.has( this, data.id ) ? app.ModelWatcher.get( this, data.id ) : new this();
if ( ( data instanceof Object ) )
{
model.fill( data );
}
return model;
}
},
/* @prototype */
{
init: function (values) {
this._super( values );
// if available identity property - register model
if( undefined !== this[ this.Class.getIdentity() ] ){
app.ModelWatcher.register( this );
}
}
}
);
return app.AWatchedModel;
});