рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдХрдИ рд▓реЗрдЦ рдЖрдП рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдРрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рдзреНрдпрд╛рди SproutCore рдирд╛рдордХ рдЙрддреНрдкрд╛рдж рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рд╣реБрдЖред рд░реВрд╕реА рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЕрд▓реНрдк рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдХрдИ рдореИрдиреБрдЕрд▓ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред
рдЗрд╕ рдЧрд╛рдЗрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ:
- рдЖрд╡реЗрджрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
- рдПрдХ рджреГрд╢реНрдп рдХреЗ рднреАрддрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛;
- рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рджреГрд╢реНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЯреЛрдбреЛ рд╕реВрдЪреА рдРрдк рдмрдирд╛рддреЗ рд╕рдордп рдЖрдк рдпрд╣ рд╕рдм рд╕реАрдЦреЗрдВрдЧреЗред
рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
Github рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдПрдХ
рдкреЗрдВрдЪрдХрд╕ рднреА рд╣реИред
1 рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА SproutCore рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рд░реВрдмреАрдЧреИрдо рдХрдорд╛рдВрдб рд░рддреНрди рд╕реНрдерд╛рдкрд┐рдд рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡реИрд╕реЗ, SproutCore рдХреЛ рд░реВрдмреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд╡реИрд╕реЗ рднреА рд░реВрдмреА рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред рд╡рд┐рдХрд╛рд╕ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд░реВрдмреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдордп рдкрд░ рдФрд░ рдЕрдзрд┐рдХред
рдореИрдВрдиреЗ RubyGems рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред
2 рдПрдХ рдирдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдирд╛рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде HTML рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЗрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
$ sc-init todos --templateрдпрд╣ рдЙрдкрдпреЛрдЧрд┐рддрд╛
рдРрдкреНрд╕ / рдЯреЙрдбреЛрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдЧреАред
рдРрдкреНрд╕ /рдЯреЙрдб /todos.js рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдореЙрдбрд▓, рджреГрд╢реНрдп рдФрд░ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред
рд╕рдВрд╕рд╛рдзрди /рдЯреЗрдореНрдкреНрд▓реЗрдЯ / - рдореЗрдВ рдпрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИрдВред
todos.handlebars - рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯред
рдЫрд╡рд┐рдпрд╛рдБ / - рдЗрд╕рдореЗрдВ рдЪрд┐рддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╢реИрд▓рд┐рдпреЛрдВ
/ - рдФрд░ рдпрд╣рд╛рдБ рд╢реИрд▓рд┐рдпреЛрдВ рд░рд╣реЗ рд╣реИрдВред
todos.css рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рд╣реИред
рдкрд░реАрдХреНрд╖рдг /рдмрд┐рд▓реНрдбрдлрд╛рдЗрд▓ - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд╢рд╛рдорд┐рд▓ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
README - рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╡рд░рдгред
рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓
рдРрдкреНрд╕ / рдЯреЙрдб / / todos.js рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ
Todos = SC.Application.create(); SC.ready(function() { Todos.mainPane = SC.TemplatePane.append({ layerId: "todos", templateName: "todos" }); });
рдпрд╣ рдХреЛрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдЯреЛрдбреЛрд╕") рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛ рдкреИрдирд▓ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдкреИрдирд▓ рдИрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдбреЗрд▓рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдЖрдкрдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХреЛ DOM рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред
рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬрдирд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдирд╛рдо рдореЗрдВ рдЕрдкрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ToDos, рддреЛ рдирд╛рдорд╕реНрдерд╛рди рдХреЛ ToDos рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛,
рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдореЛрдВ рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ (рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдРрдкреНрд╕ / to_dos) рд╣реЛрдВрдЧреЗред
3 рдореЙрдбрд▓ рдХреА рдШреЛрд╖рдгрд╛рд╣рдо рдПрдХ рдЯреВрдбреВ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪреА рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореЙрдбрд▓ рдХреЛ SC.Object рдХреЗ рдирдП рдЙрдкрд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
рдЕрдм
рдРрдкреНрд╕ / рдЯреЙрдб / / todos.js рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
Todos = SC.Application.create(); Todos.Todo = SC.Object.extend({ title: null, isDone: false }); SC.ready(function() { Todos.mainPane = SC.TemplatePane.append({ layerId: 'todos', templateName: 'todos' }); });
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЯреЙрдбреЛрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдореЙрдбрд▓ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╢реАрд░реНрд╖рдХ рдЧреБрдгреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдореЙрдбрд▓ рд╡рд░реНрдЧ рд╣реИ - рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЖрдЗрдбреЙрди - рдмреВрд▓рд┐рдпрдиред
4 рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдореЙрдбрд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛рдЕрдм рдЬрдм рдбреЗрдЯрд╛ рдХреЛ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдВрдЧреЗред рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо SC.ArrayController рд╡рд░реНрдЧ рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ
, рдЬреЛрдбрд╝реЗрдВ:
Todos.todoListController = SC.ArrayController.create({
рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдЬреИрд╕реЗ рдПрдорд╡реАрд╕реА рдврд╛рдВрдЪреЗ рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдХ рдореЙрдбрд▓ (рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░) рдФрд░ рджреГрд╢реНрдп (рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░) рдХреЗ рдмреАрдЪ рдПрдХ рдкреБрд▓ рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВред
рдРрдкреНрд╕ / рдкрд┐рдЫрд▓реЗ
/ todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
Todos.todoListController = SC.ArrayController.create({
SC.ArrayController рд╕рд░рдгреА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред SproutCore рд╕рд░рдгреА рдХреЗ рдХрдВрдЯреЗрдВрдЯ рдкрд░ рд╕реАрдзреЗ ArrayController рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЧрдП рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред
5 рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВредрдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ CSS рдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕реЗ
рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ рдФрд░
рдЗрд╕реЗ
рдРрдкреНрд╕ / рдЯреЙрдбреЛрд╕ / рд░рд┐рд╕реЛрд░реНрд╕ / рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ / рдЯреЙрдбреЛрд╕.рдПрдХреНрд╕ рдкрд░ рд╕реНрдерд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░рд┐рдПрдЯрд┐рд╡рд┐рдЯреА рдпреВрдЯрд┐рд▓рд┐рдЯреА рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЦрд╛рд▓реА рдлрд╛рдЗрд▓ рд╕реЗ
рдмрджрд▓реЗрдВ ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбрд▓ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ, рдЕрдм рдЪрд▓реЛ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВ - рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рдмрд╛рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рд╕рдВрд╕рд╛рдзрди / рдЯреЗрдореНрдкрд▓реЗрдЯ / todos.handlebars рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ ред
рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
<h1>Welcome to SproutCore!</h1>
рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:
<h1>Todos</h1> <input id="new-todo" type="text" placeholder=" ?" >
рд╣реИрдВрдбрд▓рдмрд╛рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдВ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ ред рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдХреЗ рд╕рд╛рде рд╣реИрдВрдбрд▓рдмрд╛рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдВ рдкрдврд╝реЗрдВред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рджреГрд╢реНрдп рд╣реИ, рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрд▓рдиреЗ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ sc- рд╕рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рдд рд╣реИред
$ sc-server
Starting server at 0.0.0.0:4020 in debug mode
To quit sc-server, press Control-C
>> Thin web server (v1.2.1 codename Bat-Shit Crazy)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4020, CTRL+C to stop
рдПрдХ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдВ рдФрд░
http: // localhost: 4020 / todos рдкрд░ рдЬрд╛рдПрдВ ред рдЕрдкрдиреА рд░рдЪрдирд╛ рдХреЛ рд╕рд░рд╛рд╣реЗрдВред рд╣рдордиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдЯреИрдЧ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рдХреЗ рдирд╛рдо рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛ рдФрд░ Enter рджрдмрд╛рдПрдЧрд╛, рд╣рдо рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдХрд╛рд░реНрдп рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред
рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдореЗрдВ, DOM рдЯреНрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдФрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЛрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдмрдлрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЬрдм рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА, рдЖрдкрдХреЛ рджреГрд╢реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
SC.ready рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
Todos.CreateTodoView = SC.TextField.extend({ insertNewline: function() { var value = this.get('value'); if (value) { Todos.todoListController.createTodo(value); this.set('value', ''); } } });
рдЬрдм CreateTodoView рдореЗрдВ рдПрдХ рдкрд╛рда рдлрд╝реАрд▓реНрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо SC.TextField рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╛рда рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдШрдЯрдирд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐ рдирд┐рд╡реЗрд╢рдирд▓рд╛рдЗрди рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Enter рджрдмрд╛рддрд╛ рд╣реИред рдЕрдм рдЬрдм рд╣рдордиреЗ рдЕрдкрдирд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдлрд╝рд╛рдЗрд▓
рдРрдкреНрд╕ / todos / Resources / рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ / todos.handlebars рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ :
<h1>Todos</h1> {{#view Todos.CreateTodoView}} <input id="new-todo" type="text" placeholder=" ?" /> {{/view}}
#view рдПрдХ рд╣реЗрд▓реНрдкрд░ рд╣реИрдВрдбрд▓рдмрд╛рд░ рд╣реЗрд▓реНрдкрд░ (рд╕рд╣рд╛рдпрдХ рдпрд╛ рд╕рд╣рд╛рдпрдХ -
рдЬреЛ рднреА рдЖрдкрдХреЛ рдкрд╕рдВрдж рд╣реИ) SC.TemplateView рдФрд░ HTML рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рджреГрд╢реНрдп рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг)
#view рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ HTML рддрддреНрд╡реЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛ред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирдП рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдВрдЧреЗред
рд╣рдо рд╕реВрдЪреА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
#collection block рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
#collection SC.TemplateCollectionView рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдЧрд╛, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЛ
#collection block рдХреЗ рдЕрдВрджрд░ HTML рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдлрд╝рд╛рдЗрд▓ рдХреЛрдб рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ
/ todos / Resources / рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ / todos.handlebars :
{{#collection SC.TemplateCollectionView contentBinding="Todos.todoListController"}} {{content.title}} {{/collection}}
рд╣рдордиреЗ todoListController рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдмрдВрдзрди рдХреА рдШреЛрд╖рдгрд╛ рдХреАред
рдЕрдм рдПрд░реЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ {{content.title}} рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рд┐рдд рдХрд░рдиреА рд╣реЛрдЧреА рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдмрдВрдзрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рдордЧреНрд░реА рд╕рдВрдкрддреНрддрд┐ Todos.todoListController рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрдЧреА рдФрд░ рд╕рд╛рдордЧреНрд░реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ Todos.todoListController рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред
рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рд╢рд╛рдирджрд╛рд░ рд╕рдордп
http: // localhost: 4020 / todos рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВред рдпрд╣ рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ Enter рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рда рдмреЙрдХреНрд╕ рдХреЗ рдиреАрдЪреЗ рд╕реВрдЪреА рдореЗрдВ рдЬреБрдбрд╝ рдЬрд╛рдПрдЧрд╛ред
рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдпрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдХрд░рдг рд╣реИред рд╡реЗ рдбреЗрдЯрд╛ рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рдЧрдВрджреЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
6 рдЯрд╛рд╕реНрдХ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдирд┐рд╢рд╛рдирд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдо рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рд╣реИ рдХрд╛рд░реНрдп рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдореЗрдВ рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЬреЛрдбрд╝рдирд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдШрдЯрдирд╛рдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, HTML рдХреЗ рдЙрд╕ рднрд╛рдЧ рдореЗрдВ рджреГрд╢реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдо
#view рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреГрд╢реНрдп рдФрд░ HTML рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рд╣рдо рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
HTML рддрддреНрд╡реЛрдВ рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ
рджреГрд╢реНрдп рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ (# рдХреА рдХрдореА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдЬрдЯрд┐рд▓ рджреГрд╢реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рднреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рдХрд┐рд╕реА рдПрдХ рддрддреНрд╡ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЛ
рдПрдкреНрд╕ / рдЯреЗрдбреЛрд╕ / рд░рд┐рд╕реЛрд░реНрд╕ / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рдЯреЙрдбреЛрд╕.рд╣реИрдВрдбрд▓реЗрдмрд╛рд░ рдлрд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде
рдмрджрд▓реЗрдВ :
{{#collection SC.TemplateCollectionView contentBinding="Todos.todoListController"}} {{view Todos.MarkDoneView}} {{/collection}}
рдЕрдм рд╣рдо Todos.MarkDoneView рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕реЗ рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВрдЧреЗред рдЬрдм рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдореЗрдВ рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо SC.Checkbox рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рджреГрд╢реНрдп рдХреЗ рдорд╛рди рдФрд░ рд╢реАрд░реНрд╖рдХ рдЧреБрдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдмрджрд▓рд╛рд╡ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рд╡реИрд▓реНрдпреВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдЖрдкрдХреЛ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред
SC.TemplateCollectionView рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрдЪреНрдЪрд╛ рджреГрд╢реНрдп рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдХреА рд╕рд╛рдордЧреНрд░реА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рджреГрд╢реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЪреНрдЪрд╛ рджреГрд╢реНрдп рд╣реЛрдЧрд╛, рдФрд░ рд╕рд╛рдордЧреНрд░реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрдЧрд╛ред
рдпрд╣ рд╣рдореЗрдВ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╡реИрд▓реНрдпреВ рдкреНрд░реЙрдкрд░реНрдЯреА (рдЪреЗрдХрдмреЙрдХреНрд╕) рдХреЛ рдЖрдЗрдбреЗрдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА (рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛) рдФрд░ рдЯрд╛рдЗрдЯрд▓ рдкреНрд░реЙрдкрд░реНрдЯреА (рдЪреЗрдХрдмреЙрдХреНрд╕) рдХреЛ рдЯрд╛рдЗрдЯрд▓ рдкреНрд░реЙрдкрд░реНрдЯреА (рдСрдмреНрдЬреЗрдХреНрдЯ) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
SC.ready рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
Todos.MarkDoneView = SC.Checkbox.extend({ titleBinding: '.parentView.content.title', valueBinding: '.parentView.content.isDone' });
рдХрд╛рд░реНрдп рд╕реВрдЪреА рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, CSS рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдФрд░ рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧ рд╣реИрдВред рдЖрдЗрдП рд╡рд░реНрдЧ рд╕рдВрдкрддреНрддрд┐ (рдЪреЗрдХрдмреЙрдХреНрд╕) рдФрд░ isDone рд╕рдВрдкрддреНрддрд┐ (рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛) рдХреЛ рдмрд╛рдВрдзреЗрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓
рдПрдкреНрд╕ / рдЯрд╛рдбреЛрд╕ / рд░рд┐рд╕реЛрд░реНрд╕ / рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ / рдЯреЙрдбреЛрд╕.рд╣реИрдВрдбрд▓рдмрд╛рд░реНрд╕ рдореЗрдВ рдЯрд╛рд╕реНрдХ рд▓рд┐рд╕реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрджрд▓реЗрдВ:
{{#collection SC.TemplateCollectionView contentBinding="Todos.todoListController" itemClassBinding="content.isDone"}} {{view Todos.MarkDoneView}} {{/collection}}
рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдПрдХ-рдХрд┐рдпрд╛ рд╣реБрдЖ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБ рдХрд╛ isDone рдЧреБрдг рд╕рддреНрдп рд╣реИред рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд░реНрдЧ рдирд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдореЗрдВ рдХрдИ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЖрдИрдбреА, рд╡рд░реНрдЧ рдФрд░ рдХреНрд▓рд╛рд╕рдмрд╛рдЗрдВрдбрд┐рдВрдЧред рд╕рдВрдЧреНрд░рд╣ рд╕рд╣рд╛рдпрдХ рдЖрдкрдХреЛ рдЗрди рдЧреБрдгреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдЧреБрдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдмрдЪреНрдЪреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЖрдЗрдЯрдордХреНрд▓рд╛рд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдЧреАред
рдЕрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдХрд╛рд░реНрдп рдкрд╛рда рддреБрд░рдВрдд рдкрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм рд╕рд░рдгреА рдХреЗ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреА isDone рд╕рдВрдкрддреНрддрд┐ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд HTML рддрддреНрд╡ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░реЗрдЧрд╛ред
7 рдФрд░ рдЬрд╛рдиреЗрдВрд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреВрд░реНрдг рд▓реЛрдЧреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣рдо рдЕрднреА рднреА рд╕реВрдЪреА рд╕реЗ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдЗрдП рд╕реВрдЪреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдЯреЙрдб / рд╕рдВрд╕рд╛рдзрди / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рдЯреЗрдбреЛрд╕.рд╣реИрдВрдбрд▓рдмрд╛рд░реНрд╕ рдЦреЛрд▓реЗрдВ рдФрд░
рдЯреЛрдбреЛрд╕.рдХреНрд░рд┐рдПрдЯрдЯреЛрдбреЛ рд╡реНрдпреВ рдХреЗ рдмрд╛рдж рдПрдХ рдирдпрд╛ рджреГрд╢реНрдп рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВред
{{#view Todos.StatsView id="stats"}} {{displayRemaining}} {{/view}}
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ {{displayRemaining}} рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ DOM рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧреА рдЬрдм Todos.StatsView рдХреА рдбрд┐рд╕реНрдкреНрд▓реЗрдореЗрдпрд░рд┐рдВрдЧ рдкреНрд░реЙрдкрд░реНрдЯреА рдмрджрд▓рддреА рд╣реИред
SC.ready рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рдРрдкреНрд╕ / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреГрд╢реНрдп рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ:
Todos.StatsView = SC.TemplateView.extend({ remainingBinding: 'Todos.todoListController.remaining', displayRemaining: function() { var remaining = this.get('remaining'); return (remaining === 1 ? remaining +" " : " : "+remaining); }.property('remaining') });
displayRemaining рдореЗрдВ рд╢реЗрд╖ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд╣реБрд╡рдЪрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдВ рдПрдХреНрд╢рди рдореЗрдВ рдПрдХ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдЯреВрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдХрдВрдкреНрдпреВрдЯреЗрдб рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝реЗрдВред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
Todos.todoListController = SC.ArrayController.create({
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо
рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рддреЗ рд╣реИрдВ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╕рд░рдгреА рдХреЗ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЗ isDone рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддреЗ рдпрд╛ рд╣рдЯрд╛рддреЗ рд╕рдордп
рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЧреБрдгреЛрдВ рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХреБрдВрдЬреА рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
8 рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рд╣рдо todoListController рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП clearCompletedTodos рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдирд┐рдореНрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
Todos.todoListController = SC.ArrayController.create({
рдЕрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдЯреЙрдбреНрд╕ / рд╕рдВрд╕рд╛рдзрди / рдЯреЗрдореНтАНрдкреНтАНрд▓реЗрдЯ / рдЯреЗрдбреЛрд╕.рд╣реИрдВрдбрд▓рдмрд╛рд░реНрд╕ рдЦреЛрд▓реЗрдВ рдФрд░
StatsViews рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВ:
{{#view Todos.StatsView id="stats"}} {{#view SC.Button classBinding="isActive" target="Todos.todoListController" action="clearCompletedTodos"}} {{/view}} {{displayRemaining}}. {{/view}}
рд╣рдордиреЗ SC.Button рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ Todos.todoListController рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдкрд╖реНрдЯComodectedTodos рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рдмрдирд╛рдпрд╛ред рд╣рдордиреЗ рдпрд╣ рднреА рдШреЛрд╖рдгрд╛ рдХреА рдХрд┐ рдЬрдм рдЖрдк рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд╡рд░реНрдЧ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рджрдмрд╛рдП рдЧрдП рдмрдЯрди рдХреЗ рд░реВрдк рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЕрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
9 рд╕рднреА рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВрдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВред рдЕрдм рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рдХрд╛рдо рдкрд╣рд▓реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
ToAlDistController рдХреЛ allAreDone рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
Todos.todoListController = SC.ArrayController.create({
рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдореЗрдВ рдХрдИ рдЕрдирдЧрд┐рдирдд рдорджрджрдЧрд╛рд░ рд╣реИрдВред рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡ рд╕рдЪ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХProperty ('.Done', рд╕рддреНрдп) рд╕рд╣реА рд╣реИред рдЖрдк
рдореИрдиреБрдЕрд▓ рдкрдврд╝рдХрд░ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рд╣рдо рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдзреНрд╡рдЬ рдмрдирд╛рдПрдВрдЧреЗред Todos.StatsView рдРрдб рдХреЗ рдмрд╛рдж рдлрд╝рд╛рдЗрд▓
рдРрдкреНрд╕ / todos / Resources / рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ / todos.handlebars рдореЗрдВ :
{{view SC.Checkbox class="mark-all-done" title=" " valueBinding="Todos.todoListController.allAreDone"}}
рдпрджрд┐ рдЕрдм рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ "рд╕рднреА рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ" рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк "рд╕рднреА рдЪрд▓рд╛рддреЗ рд╣реИрдВ" рдЪреЗрдХрдмреЙрдХреНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд╛рд░реНрдп рд╕реВрдЪреА рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдзреНрд╡рдЬ рдХреЛ рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо toAlDistController рдореЗрдВ allAreDone рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
Todos.todoListController = SC.ArrayController.create({
рдПрдХ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рд╕рдВрдкрддреНрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреБрдВрдЬреА рдФрд░ рдореВрд▓реНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рд╣рдо рдзреНрд╡рдЬ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ SproutCore рдХреНрд░рдорд╢рдГ AllAreDone рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕ рдХреЙрд▓ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рдЖрд╡реЗрджрди рд╡рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗред
рдореЛрдмрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП 10 рд╢реИрд▓рд┐рдпрд╛рдБрд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзреБрдирд┐рдХ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб
рдХрд░реЗрдВ рдФрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ
apps / todos / Resources / stylheets / todos_mobile.css ред рдЕрдм рдЕрдкрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреЛрд▓реЗрдВ рдФрд░ рдЖрдк рдХреЗрд╡рд▓ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред
рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓рддрд╛ред
рдореВрд▓
рд▓реЗрдЦ ред