Skip to content

brighthas/model

Repository files navigation

Install

npm i brighthas/model --save

Create Model

var createModel = require("model");
var User = createModel("User",
	"name",
	"age",
	history,{type:"array"});

Config Model

User
 .attr("name")
 .attr("age")
 .attr("history",{type:"array"});

Add method

User.method("getUserInfo",function(){

	return "Name : " + this.name + "\n Age : " + this.age;

});

create Model object

var user = new User({ name:"leo" , age:20 , history: [] });

user.begin(); // begin update
user.name = "brighthas";
user.age = 30;
user.end(); // end update  , then may emit 'changed' event. 

update model

user.begin(); // begin update
user.name = "brighthas";
user.age = 30;
user.end(); // end update  , then may emit 'changed' event. 

console.log(this.hasError());  // true / false
console.log(this.errors);  //  [] is no error .

or

user.begin();
user.set({name:"leo",age:25});
user.end(); // end update  , then may emit 'changed' event. 
console.log(this.hasError());  // true / false
console.log(this.errors);  //  [] is no error .

or no use begin() & end()

user.name = 222 ;
console.log(this.hasError());  // true 

// if have error , then can't change other value.
user.age = 16 ;  
console.log(user.age) ; // no 16.

// so first clear errors.
user.errors = [];
user.age = 16; 
console.log(user.age); // 16

toJSON | reborn

var jsonObj = user.toJSON();

var user2 = User.reborn(jsonObj); console.log(user.name === user2.name); // true

user2.name = "brighthas"; console.log(user.name === user2.name); // false

Type

if no assign type , default type="string" .

Two types : value type and complex type.

Value type

string | array | json | boolean | number | date | regexp

when get value , the value is clone .

var T = createModel("T",ts:{type:"json"});

var t = T();

t.userInfo = {name:"leo"};

var u1 = t.userInfo;
var u2 = t.userInfo;

console.log(u1 === u2); // false

Complex type

complex type can be Model or object including Type.prototype.toJSON & Type.reborn function & emit changed event.

when get value , the value is original value.

var User = createModel("User",
	"name",
	"age",
	history,{type:"array"});


var T = createModel("T",user:{type:User}); // User is Model.

var t = T();

t.user = User({name:"leo",age:21});

var u1 = t.user; // the value is original value.
var u2 = t.user; // the value is original value.

console.log(u1 === u2); // true , 

or

function User(name,age,hisitory){
	this.name = name;
	this.age = age;
	this.history = hisitory || [];
}

User.prototype.toJSON = function(){
	return {
		name:this.name,
		age:this.age,
		history:this.history
	}
}

User.reborn = function(jsonObj){
	return new User(jsonObj.name,jsonObj.age,jsonObj.history);
}


//////////////////////////////////////////


var T = createModel("T",user:{type:User});

var t = T();

t.user = User("leo",21);

var u1 = t.user; // the value is original value.
var u2 = t.user; // the value is original value.

console.log(u1 === u2); // true ,