Next generation data framework
var C = Nested.Collection.extend({
properties : {
index : function(){
if( !this._index ){
this._index = new Index( this );
this.listenTo( this, 'change add remove reset', function(){
this._index.rebuild( this );
});
}
return this._index;
}
}
});
var c = new C(); // no index at this point...
if( c.index.has( 'name' ) ){ // c.index is created
...
}
var UserInfo = NestedTypes.Model.extend({
defaults : {
name : 'test'
}
});
var user = new DetailedUserInfo();
console.assert( user.name === 'test' );
user.name = 'admin';
user.roles.push( 'admin' );
<-- user.name native property is created
<-- JSON literals are deep copied
<-- name:'test' is inherited from the base model
var DetailedUserInfo = UserInfo.extend({
defaults: {
login : '',
roles : [ 'user' ]
}
});
var UserInfo = NestedTypes.Model.extend({ defaults : { name : 'test' } }); var users = new UserInfo.Collection();
var User = Nested.Model.extend({
defaults : {
created : Date,
name : "",
loginCount : 0
}
});
var A = Nested.Model.extend({ defaults : { a : Ctor, b : Ctor.value( null ),
c : Ctor.value( "something" ) } });
new Ctor() -->
null -->
new Ctor( "something" ) -->
defaults
null -->
obj -->
new Ctor( 135 ) -->
var model = new A(), obj = new Ctor();
model.a = null;
model.b = obj;
model.c = 135;
Type cast on 'set' -->
var A = Nested.Model.extend({ defaults : { str : "", num : 0,
bool: false, int : Integer.value( 5 ) } });
"34" -->
234 -->
true -->
7 -->
var model = new A();
model.str = 34;
model.num = "234";
model.bool = "y"; model.int = 5.6;
String
Number
Boolean
<-- Automatic type detection
Type cast on 'set' -->
var DetailedUserInfo = UserInfo.extend({
urlBase : '/api/detailed_user/',
defaults : {
login : '',
roles : [ 'user' ]
},
collection : {
initialize : function(){
this.fetch();
}
}
});