рдирдорд╕реНрддреЗ, рд╣рдмреНрд░рд▓реБрдорд┐ред
рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдФрд░ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдЫреЛрдЯреЗ рд╕реЗ рдЫреЛрдЯрд╛, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ред рдЗрд╕реЗ
Model.js рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдФрд░ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ, рдЬреЛ рдЬрдЯрд┐рд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рддреЗ рд╕рдордп, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд┐рдП рдмрд┐рдирд╛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЬреЛ рд▓реЛрдЧ рд╕рд┐рд░реНрдл рдЕрдкрдиреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЙрдкрдХрд░рдг рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреА рд░рд╛рдп рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдЖрдкрдХреЛ рдХрд┐рд╕ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░
Model.js рдЖрдкрдХреЛ рдХрд┐рддрдирд╛ рд╕реВрдЯ
рдХрд░рддрд╛ рд╣реИ ?
рдХреНрдпреЛрдВ?
рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдбреЗрдЯрд╛ рдкрд░рдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╡рд░реНрддрдорд╛рди рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг - v0.1 12K рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рдЬрди - рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЗрд╡реЗрдВрдЯ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬрдм рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реИред
рдХреНрдпрд╛ рд╣реИ рдЦрд╛рд╕?
рдЪреАрдиреАред рдЖрдВрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реБрдЦрджрд╛рдпрдХ рдЪреАрдиреАред
рд╡рд░реНрдгрд┐рдд рдореЙрдбрд▓ рдХрд╣реАрдВ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред
var Note = new Model('Note', function () { this.attr('id!', 'number'); this.attr('title', 'string', 'nonempty'); this.attr('text', 'string'); });
рдлрд┐рд░ рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВред
var note = new Note({ id: 123, title: "Hello World" });
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдХрд╛рдИ рдЧреБрдг
рдЧреБрдг рдорд╛рди рдХреЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рд╣реИ:
note.data.id note.data.title note.data.text
Settersред рдмрджрд▓рддреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рднреА рдирд┐рдХрд╛рд▓ рджреА рдЬрд╛рддреА рд╣реИред
note.data.id = note.data.title = note.data.text = note.data = {тАж}
Getter
note.get(attrName[, attrName, тАж])
рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдорд╛рдВрдЧреА рдЧрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рдПрдЧрд╛ред
note.get()
рд╕рднреА рдбреЗрдЯрд╛ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд▓реМрдЯрд╛рдПрдЧрд╛ред
note.data()
рдХреЗ рд╕рдорд╛рди рд╣реИред
note.set(attrName, value)
рдФрд░
note.set({тАж})
рдкрд░рд┐рд╡рд░реНрддрди рдИрд╡реЗрдВрдЯ рдХреЛ "рдлрд╛рдпрд░" рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
note.hasChanged
рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрдХрд╛рдИ рдбреЗрдЯрд╛ рддрдм рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдЕрдВрддрд┐рдо рдмрд╛рд░ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ред
note.isNew
рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрдХрд╛рдИ рдбреЗрдЯрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
note.isPersisted
рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рд╛рд▓рд┐рдпрд╛ рдмрджрд▓рд╛рд╡ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВред
note.bind(eventName, handler)
"рд╣реИрдВрдЧ" рдХрд░рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЖрдк рдХрд┐рд╕реА рднреА рдИрд╡реЗрдВрдЯ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рди рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдкрд░ рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдерд╛рдиреЛрдВ (
Note.bind
) рдкрд░ рднреА рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВред
note.isValid
рд╡рд░реНрддрдорд╛рди рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдорд╛рдиреНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВред
note.errors
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдХреЛрдИ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
note.revert()
рдмрд┐рдирд╛ рд╕рд╣реЗрдЬреЗ рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕
note.revert()
рдФрд░
revert
рдИрд╡реЗрдВрдЯ рдХреЛ рдлрд╛рдпрд░ рдХрд░рддрд╛ рд╣реИред
рд╡рд╣ рд╕рдм рд╣реИред
рдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рднрдВрдбрд╛рд░рдг рдХреЗ рддрд░реАрдХреЗ рдФрд░ рдЗрддрдиреЗ рдкрд░ рдФрд░ рдЖрдЧреЗ рдХрд╣рд╛рдВ рд╣реИрдВ? - рдореИрдВ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛: рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдмрдЪрдд рдХреЗ рд╕рд╛рде рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ: рдпрджрд┐ рдбреЗрдЯрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЖрдкрдХреЛ рдирд┐рдЬреА рд╡рд┐рдзрд┐
note._persist()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдХрд╛рдИ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
note._persist()
, рдЬреЛ
persist
рдШрдЯрдирд╛ рднреА рдЖрдЧ рд▓рдЧрд╛рддреА рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЕрдЪреНрдЫрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ note.save()
рд╡рд┐рдзрд┐ рдХреЛ рдЕрдЬрд╛рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред Note.prototype.save = function () { var note = this; return $.ajax({ type: 'PUT', url: '/notes/'+note.data.id, data: note.data(), dataType: 'json' }).done(function (json) { note._persist(); }); } note.bind('persist', function () { $('h1', 'div#note'+this.data.id).html(this.data.title); }); note.data = { id: 123, title: "abc", text: "" } if (note.hasChanged && note.isValid) {
рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди
рдореЙрдбрд▓ рдмрдирд╛рддреЗ рд╕рдордп, рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЧреБрдг рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
this.attr('title', 'string', 'nonempty')
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдВ, рдлрд┐рд░ рдЙрд╕рдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ред рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛, рдЬрдм рд╕рдордп рдЖрддрд╛ рд╣реИ, рдШреЛрд╖рд┐рдд рдХреНрд░рдо рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рдпреЗ рдорд╛рди рдЕрдорд╛рдиреНрдп рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред
function validateMinLength(value, minLength) { if (value.length < minLength) return 'tooshort'; }
рдпрджрд┐ рдЖрдкрдХреЛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдирд╛рдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред
Model.registerValidator('array', function (value) { if (Object.prototype.toString.call(v) === '[object Array]') return 'wrongtype'; }); Model.registerValidator('minLength', validateMinLength);
Model.js рдореЗрдВ рдХрдИ рдмреБрдирд┐рдпрд╛рджреА (рдкрд╣рд▓реЗ рд╕реЗ рдкрдВрдЬреАрдХреГрдд) рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╣реИрдВ:
number
,
string
,
boolean
,
nonnull
,
nonnull
рдФрд░ред рд╡реЗ, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣, рдирд╛рдо рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╕рдордп рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ:
this.attr('title', 'string', 'nonempty', [ 'minLength', 6 ]);
рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рд╡реИрдз рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рджрд╛рджрд╛рдЬреА рдкрджреНрдзрддрд┐ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
this.attr('title', 'string', 'nonempty', [ 'minLength', 6 ], function (title) { if (title[0] !== title[0].toUpperCase()) return 'downcase'; });
рдпрд╣ рд╕рдм рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐
note.isValid
true
рдпрд╛
false
рдХрд╣ рд╕рдХреЗ, рдФрд░
note.errors
рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╣реЛред
note.data = { id: 'abc', title: '', text: 3 };
рдШрдЯрдирд╛рдУрдВ
рдЪрд╛рд░ рдШрдЯрдирд╛рдПрдВ рд╣реИрдВ:
initialize
,
change
,
persist
рдФрд░
revert
ред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдХрд╛рдИ (
note.bind
) рдкрд░ рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЗрд╕реЗ рдПрдХ рд╡рд░реНрдЧ (
Note.bind
) рдкрд░ рднреА рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╣реИрдВрдбрд▓рд░ рд╕рднреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рдПред
рдЗрдХрд╛рдИ рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рдмрд╛рд░
initialize
"рдирд┐рдХрд╛рд▓" рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
var note = new Note({тАж})
ред рддреЛ
initialize
рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рдЯрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдкрд░ рд╣реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рд╣рд░ рдмрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░
change
рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рд╕реЗрдЯрд░ рд╣реИрдВ рдЬреЛ рдмрджрд▓рд╛рд╡ рдХреЛ рдирд╣реАрдВ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ (рдпрд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред
perist
- рдЬрдм рдПрдХ рдЗрдХрд╛рдИ рдХреЛ рдПрдХ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╣реЗрдЬ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
revert
- рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдиреЗ рдЕрднреА рддрдХ рдмрд┐рдирд╛ рд╕рд╣реЗрдЬреЗ рд╣реБрдП рдмрджрд▓рд╛рд╡ (
note.revert()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
note.revert()
рдХреЛ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ред
var ALLOWED_LANGUAGES = ['en', 'ua', 'ru']; var Note = new Model('Note', function () { this.attr('id!', 'number'); this.attr('title', 'string', 'nonempty'); this.attr('lang', 'string', 'nonempty', [ 'in', ALLOWED_LANGUAGES]); this.attr('text', 'string'); }); Note.bind('initialize', function () { if (!this.data.lang) { this.set('lang', 'en');
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рдЕрдм
Model.js рдХрд▓рд╛ рдХреА рдПрдХ рд╢реБрджреНрдз
рд╕реНрдерд┐рддрд┐ рд╣реИ , рдпрд╣ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдпрджрд┐ рдЖрдк рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА
рдЬреАрдердм рдкрд░ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдмреАрдЪ, рдмрдЪреНрдЪреЗ рдХреЛ рдПрдХ рдЕрдЪреНрдЫреА рдпрд╛рддреНрд░рд╛ рдХреА рд╢реБрднрдХрд╛рдордирд╛рдПрдВ, рдХреНрдпреЛрдВрдХрд┐ "рд╡рдпрд╕реНрдХ" рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реЗ рдЕрднреА рднреА рдмрд╣реБрдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред