Backbone.js рдореЗрдВ рдирд┐рд╣рд┐рдд

Backbone.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рд╣рдХрд░реНрдореА! рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ?
рдЬрд╛рдирд┐рдП рдХреИрд╕реЗ Backbone.Model.extend({}) рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ?
рдФрд░ рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдкрддрд╛ рд╣реИ рдФрд░ рдпрд╛рдж рд╣реИ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ: рдкреНрд░реЛрдЯреЛ рдкреНрд░реЙрдкреНрд╕ рдФрд░ рд╕реНрдЯреИрдЯрд┐рдХ рдкреНрд░реЙрдкреНрд╕ред
рдпрджрд┐ рдЖрдкрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреНрд░рд╢реНрди рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдкреВрдЫрддрд╛ рд╣реВрдВред
рдореИрдВ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЕрдиреБрд╕рдВрдзрд╛рди, рдЖрд░реЗрдЦ, рдЯреИрдмрд▓реЗрдЯ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдкреНрд░рдпреБрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп / рдШрдЯрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд╣ рдЬреЛ рдореИрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ) рдХреБрдЫ рдЕрдирд┐рд╡рд╛рд░реНрдп рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХреНрдпреЛрдВ?

рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ Backbone.js рдореЗрдВ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рдореБрджреНрджреЗ рдкрд░ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реВрдВ
рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╕реНрд░реЛрдд рдЦреЛрд▓рд╛, рдФрд░ ... рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ!

рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реВрдБрдЧрд╛: рд╡рд┐рд░рд╛рд╕рдд рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдореЙрдбрд▓, рджреГрд╢реНрдп, рд╕рдВрдЧреНрд░рд╣ рдпрд╛ рд░рд╛рдЙрдЯрд░ рд╣реЛред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рдкреНрд░рд▓реЗрдЦрди


рдкреНрд░рд▓реЗрдЦрди рд╕реЗ, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдХреЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ: рдЧреБрдг рдФрд░ classPropertiesред
Backbone.View.extend (рдЧреБрдг, [classProperties])

рдЖрдк рдпрд╣ рднреА рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓ classProperties рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЧреБрдг рдРрд╕реЗ рд╣реИрдВред
рдФрд░ рдпрджрд┐ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЛ рдЖрдо рддреМрд░ рдкрд░ рд╕рднреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ (classProperties) рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╣рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЕрдкрдиреА рдЦреБрдж рдХреА рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХрдХреНрд╖рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, Backbone.Collection рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЧреБрдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡реИрдХрд▓реНрдкрд┐рдХ classProperties рдХреЛ рд╕реАрдзреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдп рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╣рдо рд╕реЛрд░реНрд╕ рдХреЛрдб рджреЗрдЦрддреЗ рд╣реИрдВ


рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдбреАрдмрдЧрд░ рдХреА рддрд░рд╣, рдЪрд▓реЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред
рдЯреЗрд╕реНрдЯ рдХреЛрдб:
 Backbone.View.extend({ testProp1: true }, { testProp2: true }); 


рд╕реНрдЯреЗрдЬ # 1

 // Helper function to correctly set up the prototype chain, for subclasses. // Similar to `goog.inherits`, but uses a hash of prototype properties and // class properties to be extended. var extend = function(protoProps, staticProps) { var parent = this; var child; 

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде goog.inherits (рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдирд┐рдкрдЯрдирд╛ рдерд╛) рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИред
рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕:


рддреБрд░рдВрдд рдореИрдВ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдордЭрддрд╛ рд╣реВрдВ:
1. Backbone.View рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ, рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдХрд╛рдо рдореЗрдВ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдФрд░ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдЬрдЧрд╣ рд▓реЗрддреЗ рд╣реИрдВред
2. Backbone.View.prototype рдорд╛рдирдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛, рд╣рдЯрд╛рдирд╛, рдЖрджрд┐ред

рд╕реНрдЯреЗрдЬ # 2

 if (protoProps && _.has(protoProps, 'constructor')) { child = protoProps.constructor; } else { child = function(){ return parent.apply(this, arguments); }; } 

рдкрд╣рд▓реЗ рд╕реЗ рдЕрдирдЬрд╛рди рдмрдЪреНрдЪреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ (рдкреНрд░реЛрдЯреЛрдкреЙрдкреНрд╕) рдореЗрдВ рджрд┐рдП рдЧрдП рдлрдВрдХреНрд╢рди рдореЗрдВ рдпрд╛ рдмреИрдХрдмреЛрди. рд╡реНрдпреВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рддрдХ, рд╣рдо рдЗрд╕ рдкрд░ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рд╕реНрдЯреЗрдЬ # 3

 _.extend(child, parent, staticProps); 

Backbone.View рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рд╣рдорд╛рд░реЗ рд╕реНрдЯреЗрдЯрд┐рдХрдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрдЪреНрдЪреЗ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Backbone.View рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЧреБрдг рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ, рдХрд┐рд╕реА рджрд┐рди рд╡реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рд╕реНрдЯреЗрдЬ # 4

 var Surrogate = function(){ this.constructor = child; }; Surrogate.prototype = parent.prototype; child.prototype = new Surrogate; 

рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдмрдЪреНрдЪреЗ рдХрд╛ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ, рдЬрд┐рд╕рдХреА рдирд┐рд░реНрдорд╛рддрд╛ рд╕рдВрдкрддреНрддрд┐ рдмрдЪреНрдЪрд╛ рд╣реИ (рд╣рд╛рдБ, рд╣рд╛рдБ, рдпрд╣ рд╣реИ) рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк Backbone.View.prototype рд╣реИред

рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмрдЪреНрдЪреЗ рдХреЛ Backbone.View.prototype рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рдореЗрдореЛрд░реА рдХреА рдмрдЪрдд рд╣реЛрддреА рд╣реИред

рд╕реНрдЯреЗрдЬ # 5

 if (protoProps) _.extend(child.prototype, protoProps); child.__super__ = parent.prototype; return child; 

рдкреНрд░реЛрдЯреЙрдкрдкреНрд░реЙрдкреНрд╕ рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрдЪреНрдЪреЗ (рд╕рд░реЛрдЧреЗрдЯ) рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк (рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рддрд░реНрдХ) рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ __super__ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдПрдВ, рдЬреЛ Backbone.View.prototype рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрдЧрд╛ред
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рд╡рд╕рд╛ рдирд┐рд░реНрдорд╛рддрд╛ (рдмрдЪреНрдЪрд╛) рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг


рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ, рд╣рдо рдорд╛рдирдХ рдЧреБрдгреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдерд┐рд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред
 var ViewConstructor = Backbone.View.extend({ protoMehod: function () { console.log(this.constructor.staticMethod()); } }, { staticProperty: 5, staticMethod: function () { return 'Hello from constructor. Property is ' + this.staticProperty; } }); var viewInstance = new ViewConstructor(); 

рджреВрд╕рд░реЗ рддрд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ (staticProps) рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн ViewConstructor рд╣реИред рдкрд╣рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП - viewInstanceред

рд╣рдо рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдХреЗ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 Backbone.View.extend({ constructor: function () { //        Backbone.View this.staticMethod(); }, render: function () { this.constructor.staticProperty; // 5 } }, { staticProperty: 5, staticMethod: function () { return 'Hello from constructor. Property is ' + this.staticProperty; } }); 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирдП рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп, рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рдПрдХ рдирд┐рд░реНрдорд╛рдгрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рд╕реНрдерд┐рд░ рдЧреБрдг рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ, рд╕рд╛рде рд╣реА Backbone.View.prototype рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рднреА рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред

Source: https://habr.com/ru/post/In190374/


All Articles