Derby.js TODO рдпрд╛ рдирд╣реАрдВ TODO



рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд░реНрдмреА рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдФрд░ рд╕реЗрдЯ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рдЕрдиреНрдп рд▓реЛрдЧ рд░реБрдЪрд┐ рдХреЗ рд╕рд╛рде рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдордп рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рдЕрднреА рднреА рдЕрдиреНрдп рдорд╛рдЗрдирд╕ рдбрд░реНрдмреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдкреНрд░рдЧрддрд┐ рдФрд░ рдкреВрд░реНрдг-рд╕реНрдЯреИрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдЖрд╕рдиреНрди рд▓рд╣рд░ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред

рдареАрдХ рд╣реИ, рд╣рдорд╛рд░реЗ рднрд╛рдк рдЗрдВрдЬрди рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдЬ рд╣рдо рдЕрдкрдиреЗ рдбрд░реНрдмреА рдЕрдиреБрд╕рдВрдзрд╛рди рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░реЗрдВрдЧреЗред




рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рдирдВрдЧреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ ред

/lib/app/index.js

app.get('/', function(page, model) { model.subscribe('todos', function(err) { if (!model.get('todos')) { model.add('todos', {text: 'Todo 1'}); model.add('todos', {text: 'Todo 2'}); } page.render(); }) }); 


рдпрд╣рд╛рдВ рд╣рдордиреЗ рдкреВрд░реЗ рдЯреЙрдбреЛрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд┐рдпрд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд╕рднреА рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░ рд▓реЗрдВрдЧреЗ рдЬрдм рд╣рдо рдЙрдирдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╕рджрд╕реНрдпрддрд╛ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдЦрд╛рд▓реА рд╣реИред рдЕрдм рд╡рд╣рд╛рдБ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВ рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рд╣реИред
model.add model.set рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рд╡рд╣ рдЖрдИрдбреА рдЬрдирд░реЗрдЯ рдХрд░рддреА рд╣реИред рд╣рдо рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 var id = model.id(); //  guid   require('node-uuid').v4() model.set('todos.' + id, {text: 'Todo 1'}); 


рд╣рдорд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдПрдХ js рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рдпрджрд┐ рд╣рдо model.get('todos') рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

 { "e1b8075c-de9a-458a-aa3c-e9b383691521": { "text":"Todo 1", "id":"e1b8075c-de9a-458a-aa3c-e9b383691521" }, "26cd5f4a-c503-4c25-aeeb-a28c8c034d08": { "text":"Todo 2", "id":"26cd5f4a-c503-4c25-aeeb-a28c8c034d08" } } -e9b383691521": { "e1b8075c-de9a-458a-aa3c-e9b383691521": { "text":"Todo 1", "id":"e1b8075c-de9a-458a-aa3c-e9b383691521" }, "26cd5f4a-c503-4c25-aeeb-a28c8c034d08": { "text":"Todo 2", "id":"26cd5f4a-c503-4c25-aeeb-a28c8c034d08" } } ": { "e1b8075c-de9a-458a-aa3c-e9b383691521": { "text":"Todo 1", "id":"e1b8075c-de9a-458a-aa3c-e9b383691521" }, "26cd5f4a-c503-4c25-aeeb-a28c8c034d08": { "text":"Todo 2", "id":"26cd5f4a-c503-4c25-aeeb-a28c8c034d08" } } 


рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдИрдбреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

 var todo = model.get('todos.e1b8075c-de9a-458a-aa3c-e9b383691521'); 


рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо html рдореЗрдВ рдЕрдкрдиреЗ todos рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдЕрд░реИ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рд╣реЛрдВрдЧреЗред рдорд┐рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрджреНрднреБрдд рдмрд╛рдд рд╣реИ - рдлрд╝рд┐рд▓реНрдЯрд░:

 app.get('/', function(page, model) { model.subscribe('todos', function(err) { if (!model.get('todos')) { model.add('todos', {text: 'Todo 1'}); model.add('todos', {text: 'Todo 2'}); } var filter = model.filter('todos'); filter.ref('_page.todos'); page.render(); }) }); 


/views/app/index.html

 <Body:> {#each _page.todos as :todo} <p>{:todo.text}</p> {/} 


рдпрд╣рд╛рдБ рд╣рдо todos рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ '_page.todos' рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд░рд┐рдлреНрд▓рд┐рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рджред рд▓реЗрдХрд┐рди рдлрд╝рд┐рд▓реНрдЯрд░ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдо рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 var todos = model.filter('todos', function(todo) { return todo.text == 'Todo1'; }).get(); 


рдпрд╣рд╛рдБ, рд╣рдордиреЗ рддреБрд░рдВрдд рдлрд╝рд┐рд▓реНрдЯрд░реНрдб рдРрд░реЗ рдХреЛ рдирд┐рдХрд╛рд▓рд╛ред

 var todos = model.filter('todos').sort('text').get(); 


рдФрд░ рдпрд╣рд╛рдБ рд╣рдордиреЗ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднреА рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рд╣реИред
рди рддреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рди рд╣реА рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкрддрд╛ рд╣реИред рд╡реЗ рдХреЗрд╡рд▓ рдЙрд╕ рдбреЗрдЯрд╛ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореЙрдбрд▓ рдореЗрдВ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореЙрдбрд▓ рднрд░реЗрдВ!

рдмрддреНрддрдЦ рдХреНрдпрд╛ reflist рдХреЗ рд╕рд╛рде рд╣реИ? рдпреЗ рддрдерд╛рдХрдерд┐рдд рд╕рдВрджрд░реНрдн рд╣реИрдВред рдЖрдкрдХреЛ рджреЛ рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 app.get('/', function(page, model) { model.subscribe('todos', function(err) { if (!model.get('todos')) { model.add('todos', {text: 'Todo 1'}); model.add('todos', {text: 'Todo 2'}); } var ids = Object.keys(model.get('todos')); model.set('_page.ids', ids) model.refList('_page.todos', 'todos', '_page.ids'); page.render(); }) }); 


ids рдЙрди todo рдХреА рдЖрдИрдбреА рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬреЛ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╡реЗ рд╕рд░рдгреА '_page.todos' рдореЗрдВ рднреА рдСрд░реНрдбрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо '_page.ids' рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ '_page.todos' рдХреЛ рддреБрд░рдВрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред

рдЪрд▓реЛ рдпрд╛рддрдирд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ:

 model.subscribe('todos', function(err) { //     todos }); model.subscribe('todos.e1b8075c-de9a-458a-aa3c-e9b383691521', function(err) { //     }); model.subscribe('todos.e1b8075c-de9a-458a-aa3c-e9b383691521.text', function(err) { //       }); model.subscribe('users', 'todos.e1b8075c-de9a-458a-aa3c-e9b383691521.text', function(err) { //   ,     }); 


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд▓рд╛рдЦ рдЯреЙрдб рд╣реИрдВред рдФрд░ рд╣рдо рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдХреБрдЫ рдЕрдХреНрд╖рд░ рд╣реИрдВред рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣рд╛рдВ рд░рд╛рд╕реНрддреЗ рдмреЗрдХрд╛рд░ рд╣реИрдВред рдлрд╝рд┐рд▓реНрдЯрд░ рднреА рдХрд░реЗрдВред рдкреНрд░рд╢реНрди рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ:

 app.get('/', function(page, model) { var query = model.query('todos', {text: 'Todo 1'}) model.subscribe(query, function(err) { if (!model.get('todos')) { model.add('todos', {text: 'Todo 1'}); model.add('todos', {text: 'Todo 2'}); } query.ref('_page.todos'); page.render(); }) }); 


{text: 'Todo 1'} рдорд╛рдирдЧреЛ рдХреНрд╡реЗрд░реА рд╣реИ ред рдпрд╣реА рд╣реИ, liveb-mongo рдПрдбреЙрдкреНрдЯрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реАрдзреЗ mongo рдХреЗ рд▓рд┐рдП рдлреЙрд░рд╡рд░реНрдб рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдбреЗрдкреНрдЯрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Derby.js рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордЧреНрд░реА

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


All Articles