рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ
рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдмрд╛рдд рдХреА рдЧрдИ рдереАред
рдпрд╣ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рдЧрд╣рд░рд╛ рдХрд░рдиреЗ рдФрд░ рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдЗрд╕ рдореИрдиреБрдЕрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХреЗрдВрдЧреЗ:
- SC.Record рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред
- SC.Store рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВред
- рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВред
- SC.Query рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЧреНрд░рд╣рдг рдХреНрд╡реЗрд░реА рднреЗрдЬреЗрдВред
1 рдЖрд╡реЗрджрди рддреИрдпрд╛рд░ рдХрд░рдирд╛
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреЛрдбреЛ-рд▓рд┐рд╕реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд░реЗрдВред
рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдбрд▓, рд╡рд┐рдЪрд╛рд░ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреЗрдЬ рдЕрдкрдбреЗрдЯ рдХреЗ рдмреАрдЪ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рдереАред
рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЕрдкрдиреЗ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдХреЗ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
SC.Store рдЙрджрд╛рд╣рд░рдг рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
SC.Store рд╕рд░реНрд╡рд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SC.DataSource рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЗрд╕ рдЧрд╛рдЗрдб рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рдЖрд╡реЗрджрди рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ GitHub рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рднрдВрдбрд╛рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдмрд┐рд▓реНрдбрдлрд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
config :all, :required => ["sproutcore/core_foundation", "sproutcore/datastore"], :theme => "sproutcore/empty_theme"
2 рдореЙрдбрд▓ рдкрд░рд┐рднрд╛рд╖рд╛
рдЕрдВрддрд┐рдо рдкрд╛рда рдореЗрдВ, рд╣рдордиреЗ рдореЙрдбрд▓ рдХреЛ SC.Object рдХреЗ рдЙрдкрд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛, SC.Record рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдмрджрд▓реЗрдВ:
Todos.Todo = SC.Record.extend({ title: SC.Record.attr(String), isDone: SC.Record.attr(Boolean, { defaultValue: NO }) });
рдЕрдм рд╣рдо рдореЙрдбрд▓ рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ SC.Record рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рд╢реАрд░реНрд╖рдХ рдЕрдм рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдмреВрд▓рд┐рдпрди рдЪрд░ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдм рдЭреВрдареА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреВрдХ,
рдЬрдм рддрдХ рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛред
3 рд╕реНрдереИрддрд┐рдХ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрдирд╛рдирд╛
рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рд╕реНрдерд┐рд░ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдЧреНрд░рд╣ рдбреЗрдЯрд╛ рд╣реИрд╢ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
рдЖрдЗрдП, рдПрдХ рдРрд╕рд╛ рд╕реЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдореЙрдбрд▓ рдХреЛрдб рдХреЗ рдмрд╛рдж рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
Todos.Todo.FIXTURES = [ { "guid": "todo-1", "title": "Build my first SproutCore app", "isDone": false }, { "guid": "todo-2", "title": "Build a really awesome SproutCore app", "isDone": false }, { "guid": "todo-3", "title": "Next, the world!", "isDone": false } ];
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбрд▓ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рднреА рдмрджрд▓рд╛рд╡ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ SC.Store рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдмрдирд╛рддрд╛ рд╣реИред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ:
рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдмрдирд╛рдпрд╛ рд╣реИред рдЬрдм рд╣рдо рд╕реНрдереИрддрд┐рдХ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛
рд╕реЗ () рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред Sc-server рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ
http: // localhost: 4020 / todos рдЦреЛрд▓реЗрдВред
рдЕрдм рд╣рдорд╛рд░реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рд▓рд┐рдЦреЗрдВрдЧреЗ:
records = Todos.store.find(Todos.Todo) records.objectAt(0).get('title')
рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:
рд╣рдордиреЗ рдмрд╕ рдЕрдкрдиреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЦреЛрдЬ () рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛, рдЬреЛ SC.RecordArray рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬреБрдбрд╝ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рднреА рдЬрдм рд░рд┐рдХреЙрд░реНрдб рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
4 рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рднрдВрдбрд╛рд░рдг рдмрдВрдбрд▓
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Todos.todoListController рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдЧреБрдг рд╕реЗрдЯ рдХрд░реЗрдВ
рд╕реНрдЯреЛрд░ рдХреЗ рдлрдВрдХреНрд╢рди () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рдиред рдпрд╣ SC.ready () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдХреЛ рдирд┐рдореНрди рдореЗрдВ рдмрджрд▓реЗрдВ:
SC.ready(function() { Todos.mainPane = SC.TemplatePane.append({ layerId: 'todos', templateName: 'todos' }); var todos = Todos.store.find(Todos.Todo); Todos.todoListController.set('content', todos); });
рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреЗрдЬ рдХреЛ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдерд╛, рд╡рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди / todos / todos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рдореНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
createTodo: function(title) { Todos.store.createRecord(Todos.Todo, { title: title }); },
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЯрд╛рд╕реНрдХ рдбрд┐рд▓реАрдЯ рдлрдВрдХреНрд╢рди рдХреЛ рдРрдкреНрд╕ / рдЯреЙрдб / / рдбреЙрд╕.рдЬрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓реЗрдВ:
Todos.todoListController = SC.ArrayController.create({
рдЕрдм рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА JSON рдореИрд╕реЗрдЬрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреА рд╣реИред
рдореВрд▓
рд▓реЗрдЦ