
рдПрдХ рд╕реБрдмрд╣ рдмрд╛рджрд▓, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореЗрд░реА рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдареАрдХ рд╕реЗ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рдЧреИрд░-рд▓рд╛рднрдХрд╛рд░реА, рдПрдХ 3 рдбреА рд╢реВрдЯрд░ рдореЗрдВ HUD рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд▓реНрдХрд╛ рдЖрд╡реЗрджрди рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ 2 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛, рдЧрд░реНрдо рдФрд░ рдЕрдиреБрднрд╡рд╣реАрди рдерд╛ред рдирддреАрдЬрддрди, рдЙрддреНрдХреГрд╖реНрдЯ рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛, рдЬреЛ рдЕрдкрдиреА рд╕рднреА рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╕рдордЭрджрд╛рд░ рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рдмрдирдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╡реЗрджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ, рдЗрд╕реЗ рдПрдХ рдирдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рджреЗрдиреЗ, рд╕рдорд░реНрдерди рдФрд░ рдЕрджреНрдпрддрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдЙрддреНрддрд░ рд╕рд░рд▓ рд▓рдЧ рд░рд╣рд╛ рдерд╛ - рдПрдорд╡реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╕реНрддрд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╣реА рдкреВрд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рд╕рд░рд▓ рдФрд░ рдкреНрд░рднрд╛рд╡реА рд░реВрдкрд░реЗрдЦрд╛ рдЪреБрдирдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬреЛ рдПрдХ рдареЛрд╕ рдЖрдзрд╛рд░ рдмрди рдЬрд╛рдПрдЧрд╛ред рдПрдХ рддреНрд╡рд░рд┐рдд рд╢реЛрдз рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ
backbone.js рдХреЛ рдЪреБрдирд╛ред рдЕрдкрдиреА рд╕рд╛рджрдЧреА рдФрд░ рд▓рдЪреАрд▓рд╛рдкрди рдкрд╕рдВрдж рдХрд┐рдпрд╛ред рдЖрдк рдмрд╕ рд╕реНрд░реЛрдд рдХреЛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХрд┐ рдХреГрдкрдпрд╛ рдирд╣реАрдВ рдерд╛ рдПрдорд╡реА рдкреИрдЯрд░реНрди рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдИ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрд░реНрдХ рдХреЛ рдзрдмреНрдмрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЖрдкрдХреА рдмрд╛рдЗрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрджрд╛ рд╣реБрдЖ рдерд╛, рдЬреЛ рдкрд╣реЗрд▓реА рдХреЗ рд▓рд╛рдкрддрд╛ рднрд╛рдЧреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рд╕рд╛рде рд╣реА, рдХреБрдЫ рдирдпрд╛ рдмрдирд╛рдирд╛ рд╣рдореЗрд╢рд╛ рдордЬреЗрджрд╛рд░ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддрд╛ рд╣реИред рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдореИрдВрдиреЗ рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рднреА рднрд╛рдЧреЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕рдВрдкреВрд░реНрдг рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рднреА рдореЙрдбрд▓ рдФрд░ рд╕рдВрдЧреНрд░рд╣ (рджреЛрдиреЛрдВ рдмреБрдирд┐рдпрд╛рджреА рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрдорд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ) рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдШрдЯрдХреЛрдВ (рд╡рд┐рдЪрд╛рд░реЛрдВ) рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдХрдВрдХрд╛рд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
Controller = { views: {},
рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдирд┐рдпрдВрддреНрд░рдХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдореЙрдбрд▓ рдХрд╛ рд╕реЗрдЯ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реЛред рдЗрд╕рд▓рд┐рдП
Application
рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ - рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдирд┐рд░реНрдорд╛рддрд╛ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдПрдХ рд╣реА рдЖрд╡реЗрджрди рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдЖрд╡реЗрджрди рдХрд╛ рдХрдВрдХрд╛рд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
Application = {
рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд╕рдордп рд╕рднреА рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рддреБрд░рдВрдд рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреЙрд▓рдмреИрдХ рдЙрд╕ рд╕рдордп рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╕рднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рд╣реЛрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ "рдкрддрд╛" рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрд╡реЗрджрди рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рдХреЗ, рд╣рдо рддрд░реАрдХреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
рдпрд╣ рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдФрд░ рдЗрдХрд╛рдИ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
EventBus = {
рдЕрдм рдЬрдм рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рднреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрд╡реЗрджрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЖрдЗрдП рдореБрдЦреНрдп рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ -
Application
ред рд╣рдо рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдмреИрдХрдмреЛрди рдХрд░рддрд╛ рд╣реИред
var Application = function(options) { _.extend(this, options || {});
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
_.extend
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ
_.extend
, рд╣рдо рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
_.extend(Application.prototype, {
рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
Application.initializeControllers
рд╕реАрдзреЗ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓рд┐рдВрдХ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдореЙрдбрд▓ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рддрддреНрдХрд╛рд▓ рдФрд░ рдШрдЯрд╛ рджреЗрдВрдЧреЗред рдФрд░
Application.launchControllers
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдП рдЧрдП рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ рдФрд░
Controller.onLaunch
рдХреЙрд▓рдмреИрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗред
_.extend(Application.prototype, { ... initializeControllers: function(controllers) { this.controllers = {}; _.each(controllers, function(ctrl) { var classReference = resolveNamespace(ctrl), id = ctrl.split('.').pop();
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХреЛрдВ рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
Application.addListeners
рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ EventBus рдХреЛ рдХрд╛рд░реНрдп рд╕реМрдВрдкрддрд╛ рд╣реИ:
_.extend(Application.prototype, { ... addListeners: function(listeners, controller) { this.eventbus.addListeners(listeners, controller) } ... });
рдореЙрдбрд▓ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХрд╛ рд╕рдВрджрд░реНрдн рдФрд░ рдирдИ рдЗрдХрд╛рдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ; рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
_.extend(Application.prototype, { ... getModel: function(name) { this._modelsCache = this._modelsCache || {}; var model = this._modelsCache[name], modelClass = this.getModelConstructor(name); if(!model && modelClass) { model = this.createModel(name); this._modelsCache[name] = model; } return model || null; }, getModelConstructor: function(name) { return this.models[name]; }, createModel: function(name, options) { var modelClass = this.getModelConstructor(name), options = _.extend(options || {}); var model = new modelClass(options); return model; }, getCollection: function(name) { ... }, getCollectionConstructor: function(name) { ... }, createCollection: function(name, options) { ... }, ... });
рдЕрдм, рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдмреБрдирд┐рдпрд╛рджреА рдирд┐рд░реНрдорд╛рдг рддреИрдпрд╛рд░ рд╣реИред рдЙрд▓реНрд▓реЗрдЦ
Application.parseClasses
рд╡рд┐рдзрд┐ рд╕реЗ рдмрдирд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ, рдореЙрдбрд▓, рд╕рдВрдЧреНрд░рд╣ рдХреА рд╕реВрдЪреА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░ рд╣реЛ рд░рд╣реА рд╣реИ
[ 'myApplication.controller.UserManager', 'myApplication.controller.FormBuilder' ]
Application.parseClasses рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рд╕рд░рдгреА рдХреЛ рдореИрдкрд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛
{ 'UserManager': myApplication.controller.UserManager, 'FormBuilder': myApplication.controller.FormBuilder }
рдЗрд╕рд▓рд┐рдП рдореИрдВ 2 рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реВрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА рд▓рд┐рдВрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реЛрдВрдЧреЗ рдЬреЛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдирд╛рдореЛрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред рджреВрд╕рд░реЗ, рд╣рдо рдмреЗрд╕ рднрд╛рдЧреЛрдВ рдХреЛ рдЙрдирдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдирд╛рдо рд╕рднреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд╣реЛрдВрдЧреЗред
рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдХреЛрдб рдорд┐рд▓реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо
Application
рд▓рд┐рдП рдореЙрдбрд▓ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо рд╕реМрдВрдкрддреЗ рд╣реИрдВред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдШреЛрд╖рдгрд╛:
var Controller = function(options) { _.extend(this, options || {}); this.initialize.apply(this, arguments); };
рдФрд░ рдлрд┐рд░ рдЖрдк рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
_.extend(Controller.prototype, { views: {}, models: {}, collections: {}, initialize: function(options) { }, addListeners: function(listeners) { this.getApplication().addListeners(listeners, this); }, onLaunch: function(application) { }, getApplication: function() { return this.application; } });
рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗрдВ:
_.extend(Controller.prototype, { ... getViewConstructor: function(name) { return this.views[name]; }, createView: function(name, options) { var view = this.getViewConstructor(name), options = _.extend(options || {}, { alias: name }); return new view(options); } ... });
рд╣рдо рдЕрдкрдиреЗ
Application
рд▓рд┐рдП рдореЙрдбрд▓ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╕реМрдВрдкрддреЗ рд╣реИрдВ
_.extend(Controller.prototype, { ... getModel: function(name) { return this.application.getModel(name); }, getModelConstructor: function(name) { return this.application.getModelConstructor(name); }, createModel: function(name, options) { return this.application.createModel(name) }, getCollection: function(name) { return this.application.getCollection(name); }, getCollectionConstructor: function(name) { return this.application.getCollectionConstructor(name); }, createCollection: function(name, options) { return this.application.createCollection(name); } ... });
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ
Application.EventBus
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рджреЗрдВ
_.extend(Controller.prototype, { ... fireEvent: function(selector, event, args) { this.application.eventbus.fireEvent(selector, event, args); } ... });
рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдирд┐рд░реНрдорд╛рдг рддреИрдпрд╛рд░ рд╣реИ! рдХреЗрд╡рд▓ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрдЪрд╛ рд╣реИ :)
EventBus рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
Backbone.View
рдХреЗ рдореВрд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрдпрдирдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
alias
рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдШрдЯрдХ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдЗрди рдХреА рдЬрд╛рдПрдЧреАред рдФрд░ рдПрдХ
fireEvent
рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдореВрд▓
View.trigger()
рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирдИ рдШрдЯрдирд╛
EventBus
рдХреЛ
EventBus
ред
var EventBus = function(options) { var me = this; _.extend(this, options || {});
рдЕрдм рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдирдИ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП
EventBus.addListeners
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░
EventBus.fireEvent
рд╡рд╛рдВрдЫрд┐рдд рд╣реИрдВрдбрд▓рд░ рдкрд░ рдбрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред
_.extend(EventBus.prototype, {
рд╣реБрд░реНрд░реЗ! рдЕрдм рд╕рднреА рдореБрдЦреНрдп рднрд╛рдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ! рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢
Application.extend = Backbone.Model.extend; Controller.extend = Backbone.Model.extend;
рдЕрдм рд╣рдо
extend
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдмреЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЙрджрд╛рд╣рд░рдг
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
Backbone.Application рдкреЗрдЬ рдкрд░
рд╕реНрд░реЛрдд рдлрд╛рдЗрд▓реЗрдВ рдФрд░
рдкреНрд░рд▓реЗрдЦрдирдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг
рдЙрджрд╛рд╣рд░рдг рднреА рдмрдирд╛рдпрд╛ - рдпрд╣ рдПрдорд╡реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдЯреВрдбреЛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ -
github.com/namad/Backbone.Application/blob/master/examples/ToDo/js/todos.jsрдФрд░ рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдпрд╣ рдкреВрд░реА рдмрд╛рдЗрдХ
рд▓рд┐рдЦреА рд╣реИ , рд╡рд╣ рд╣реИ
рд╡рд┐рдЬрд╝реБрдз , рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ рдХреНрд╡реЗрдХ рд▓рд╛рдЗрд╡ рдЧреЗрдо рдХреЗ рд▓рд┐рдП HUD рд╕рдВрдкрд╛рджрдХред рдлрд┐рд▓рд╣рд╛рд▓, рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИ, рдЖрдкрдХреЛ рдЫреЛрдЯреА рдЪреАрдЬреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдЫреВ рд╕рдХрддреЗ рд╣реИрдВред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ,
Google рдХреЛрдб рдкрд░ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕реНрд░реЛрдд
рдХреЛрдбPS рдпрд╣ рдЗрд╕ рдкреНрд░рдХреГрддрд┐ рдХрд╛ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИ рдФрд░ рдореБрдЭреЗ рдХреБрдЫ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ :) рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкрд░реНрдпрд╛рдкреНрдд рд╕рдореАрдХреНрд╖рд╛ рдХрд╛ рд╡рдЬрди рд╕реЛрдиреЗ рдореЗрдВ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!