SlideShare a Scribd company logo
1 of 13
Write less, do more MVVM in JavaScript using KnockoutJS
Извечная проблема Model Приложение MVVM MVC MVP View
MVVM A ViewModel is basically a value converter on steroids. Josh Smith  Model View Model View
color r
<svg> <circle id="circle" cx="110" cy="110" r="50" stroke="red" fill="transparent“ /> </svg> <div> Radius: <input type="range" min="10" max="100" step="1" id="radius" value="50" /> Color: <input type="text"id="color" value="red" /> varcircle = document.getElementById('circle'), radiusField = document.getElementById('radius'), colorField = document.getElementById('color'); radiusField.onchange = function () { circle.setAttribute('r', radiusField.value); } colorField.onchange = function () { circle.setAttribute('stroke', colorField.value); } Лучшая архитектура – её отсутствие
<svg> <circle id="circle" cx="110" cy="110" r="50" stroke="red" fill="transparent“ /> <text id="radiusLabel"></text> </svg> Radius: <input type="range" min="10" max="100" step="1" id="radius" value="50" /> Color: <input type="text"id="color" value="red" /> varcircle = document.getElementById('circle'), radiusField = document.getElementById('radius'); colorField = document.getElementById('color'); circle.onclick = function () { var c = random_color(); circle.setAttribute('stroke', colorField.value); colorField.value = c; } circle.onresize = function () { radiusField.value = circle.getAttribute('r'); radiusLabel.innerText = radiusField.value + 'px'; } radiusField.onchange = function () { circle.setAttribute('r', radiusField.value); radiusLabel.innerText = radiusField.value + 'px'; } colorField.onchange = function () { circle.setAttribute('stroke', colorField.value); } Лучшая архитектура – её отсутствие
Лучшая архитектура – её отсутствие varui = { radius: 50, color: 'red', setRadius: function (r) { this.radius = r; circle.setAttribute('radius'); radiusField.value = r; radiusLabel.innerText = radius + 'px'; }, setColor: function (c) { this.color = c; circle.setAttribute('stroke', color); colorField.value = c; } } circle.onclick = function () { var c = random_color(); ui.setColor(c); } colorField.onchange = function () { ui.setColor(colorField.value); } circle.onresize = function (radius) { ui.setRadius(radius); } radiusField.onchange = function () { ui.setRadius(radiusField.value); }
<svg> <circle cx="200" cy="200" fill="transparent" data-bind="?"  /> <text data-bind="?"></text> </svg> Radius:  <input type="range" min="10" max="100" step="1"  data-bind="?" /> Color:  <input type="text"  data-bind="?" /> varui = { radius: 50, color: 'red', randomizeColor: function () { this.color = random_color(); 	}, 	resize: function(r) { this.radius = r; 	} }; Мечтать не вредно
Декларативное связывание Автоматическое обновление UI Отслеживание зависимостей Templaiting Полная автономность Совместимость с любым JavaScript framework’ом Отличная документация
<svg> <circle cx="200" cy="200" fill="transparent" data-bind=" attr: { stroke: color, r: radius 		},  click: randomizeColor, 		resize: resize "  /> <text  data-bind="text: radius() + 'px'" ></text> </svg> Radius:  <input type="range" min="10" max="100" step="1"  data-bind="value: radius" /> Color:  <input type="text"  data-bind="value: color" /> varviewModel = { radius: ko.observable(50), color: ko.observable('red'), randomizeColor: function () { this.color(random_color()); 	}, 	resize: function(r) { this.radius(r); 	} }; ko.applyBindings(viewModel); KnockoutJS – а код-то где?
Observables
Observables
http://en.wikipedia.org/wiki/Model_View_ViewModel http://csharperimage.jeremylikness.com/2010/04/model-view-viewmodel-mvvm-explained.html http://msdn.microsoft.com/en-us/magazine/dd419663.aspx http://www.knockmeout.net/ Ресурсы

More Related Content

Viewers also liked

Cumpleaños de Jess 2012
Cumpleaños de Jess   2012Cumpleaños de Jess   2012
Cumpleaños de Jess 2012llAlvarockll
 
Democratic opinion
Democratic opinionDemocratic opinion
Democratic opinionnema84
 
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...Haute Autorité de Santé
 
Nouvelles technologies et archéologie suisse
Nouvelles technologies et archéologie suisseNouvelles technologies et archéologie suisse
Nouvelles technologies et archéologie suisseNathalie Duplain
 
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...Haute Autorité de Santé
 
Présentation de Corporation QMX Gold Aout 2012
Présentation de Corporation QMX Gold Aout 2012Présentation de Corporation QMX Gold Aout 2012
Présentation de Corporation QMX Gold Aout 2012QMX Gold Corporation
 
IST et Documentation du point de vue du MESR : continuité et nouvel élan
IST et Documentation du point de vue du MESR : continuité et nouvel élanIST et Documentation du point de vue du MESR : continuité et nouvel élan
IST et Documentation du point de vue du MESR : continuité et nouvel élanABES
 
Etat agriculture urbaine arrondissement Lachine
Etat agriculture urbaine arrondissement LachineEtat agriculture urbaine arrondissement Lachine
Etat agriculture urbaine arrondissement LachineLouis-Alexandre Cazal
 
II Conferencia Económica del Mediterráneo Noroccidental. 6.6.2011.
II Conferencia Económica del Mediterráneo Noroccidental. 6.6.2011.II Conferencia Económica del Mediterráneo Noroccidental. 6.6.2011.
II Conferencia Económica del Mediterráneo Noroccidental. 6.6.2011.Universidad Autónoma de Barcelona
 
Laissez-vous séduire
Laissez-vous séduireLaissez-vous séduire
Laissez-vous séduireIsabelle Caza
 
Expo monet-cathedrale
Expo monet-cathedraleExpo monet-cathedrale
Expo monet-cathedraleRouen
 
Présentation - Bas relief de la Porte Dorée
Présentation - Bas relief de la Porte DoréePrésentation - Bas relief de la Porte Dorée
Présentation - Bas relief de la Porte DoréeCéline Kniebihler
 
Una primera aproximación a la Ley de reforma de la Seguridad Social.
Una primera aproximación a la Ley de reforma de la Seguridad Social. Una primera aproximación a la Ley de reforma de la Seguridad Social.
Una primera aproximación a la Ley de reforma de la Seguridad Social. Universidad Autónoma de Barcelona
 

Viewers also liked (20)

Tuiter y memes
Tuiter y memesTuiter y memes
Tuiter y memes
 
Cumpleaños de Jess 2012
Cumpleaños de Jess   2012Cumpleaños de Jess   2012
Cumpleaños de Jess 2012
 
Guia derechos-personas-con-vih
Guia derechos-personas-con-vih Guia derechos-personas-con-vih
Guia derechos-personas-con-vih
 
Tennis
TennisTennis
Tennis
 
Guia21010102202 realizar larecoleccion y entrega
Guia21010102202 realizar larecoleccion y entregaGuia21010102202 realizar larecoleccion y entrega
Guia21010102202 realizar larecoleccion y entrega
 
Democratic opinion
Democratic opinionDemocratic opinion
Democratic opinion
 
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
 
Nouvelles technologies et archéologie suisse
Nouvelles technologies et archéologie suisseNouvelles technologies et archéologie suisse
Nouvelles technologies et archéologie suisse
 
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
Deux jours pour l’appropriation du guide pour l’auto-évaluation annuelle d’un...
 
Présentation de Corporation QMX Gold Aout 2012
Présentation de Corporation QMX Gold Aout 2012Présentation de Corporation QMX Gold Aout 2012
Présentation de Corporation QMX Gold Aout 2012
 
IST et Documentation du point de vue du MESR : continuité et nouvel élan
IST et Documentation du point de vue du MESR : continuité et nouvel élanIST et Documentation du point de vue du MESR : continuité et nouvel élan
IST et Documentation du point de vue du MESR : continuité et nouvel élan
 
Etat agriculture urbaine arrondissement Lachine
Etat agriculture urbaine arrondissement LachineEtat agriculture urbaine arrondissement Lachine
Etat agriculture urbaine arrondissement Lachine
 
Gérer sa e réputation dans le secteur tourisme
Gérer sa e réputation dans le secteur tourismeGérer sa e réputation dans le secteur tourisme
Gérer sa e réputation dans le secteur tourisme
 
Tweets Encuentro conecta-joven-2013
Tweets Encuentro conecta-joven-2013Tweets Encuentro conecta-joven-2013
Tweets Encuentro conecta-joven-2013
 
II Conferencia Económica del Mediterráneo Noroccidental. 6.6.2011.
II Conferencia Económica del Mediterráneo Noroccidental. 6.6.2011.II Conferencia Económica del Mediterráneo Noroccidental. 6.6.2011.
II Conferencia Económica del Mediterráneo Noroccidental. 6.6.2011.
 
Laissez-vous séduire
Laissez-vous séduireLaissez-vous séduire
Laissez-vous séduire
 
Expo monet-cathedrale
Expo monet-cathedraleExpo monet-cathedrale
Expo monet-cathedrale
 
Présentation - Bas relief de la Porte Dorée
Présentation - Bas relief de la Porte DoréePrésentation - Bas relief de la Porte Dorée
Présentation - Bas relief de la Porte Dorée
 
Descriptor curso ley20536
Descriptor curso ley20536Descriptor curso ley20536
Descriptor curso ley20536
 
Una primera aproximación a la Ley de reforma de la Seguridad Social.
Una primera aproximación a la Ley de reforma de la Seguridad Social. Una primera aproximación a la Ley de reforma de la Seguridad Social.
Una primera aproximación a la Ley de reforma de la Seguridad Social.
 

More from DneprCiklumEvents

Convert estimates to plans (Maxym Mykhalchuk Ciklum)
Convert estimates to plans (Maxym Mykhalchuk Ciklum)Convert estimates to plans (Maxym Mykhalchuk Ciklum)
Convert estimates to plans (Maxym Mykhalchuk Ciklum)DneprCiklumEvents
 
Time management training (Vadim Tikanov Ciklum)
Time management training (Vadim Tikanov Ciklum)Time management training (Vadim Tikanov Ciklum)
Time management training (Vadim Tikanov Ciklum)DneprCiklumEvents
 
Vladimir kozhayev handmade isometry
Vladimir kozhayev handmade isometryVladimir kozhayev handmade isometry
Vladimir kozhayev handmade isometryDneprCiklumEvents
 
Pavel yuriychuk svg in game development
Pavel yuriychuk svg in game developmentPavel yuriychuk svg in game development
Pavel yuriychuk svg in game developmentDneprCiklumEvents
 
Vitaly hit' abc_of_game_development
Vitaly hit' abc_of_game_developmentVitaly hit' abc_of_game_development
Vitaly hit' abc_of_game_developmentDneprCiklumEvents
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''DneprCiklumEvents
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''DneprCiklumEvents
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''DneprCiklumEvents
 
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''DneprCiklumEvents
 
03 net saturday anton samarskyy ''document oriented databases for the .net pl...
03 net saturday anton samarskyy ''document oriented databases for the .net pl...03 net saturday anton samarskyy ''document oriented databases for the .net pl...
03 net saturday anton samarskyy ''document oriented databases for the .net pl...DneprCiklumEvents
 
01 net saturday alex krakovetskiy ''asp.net scaffolding''
01 net saturday alex  krakovetskiy ''asp.net scaffolding''01 net saturday alex  krakovetskiy ''asp.net scaffolding''
01 net saturday alex krakovetskiy ''asp.net scaffolding''DneprCiklumEvents
 
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apSergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apDneprCiklumEvents
 
Segey Glebov tips and tricks for modern mobile project management
Segey Glebov tips and tricks for modern mobile project managementSegey Glebov tips and tricks for modern mobile project management
Segey Glebov tips and tricks for modern mobile project managementDneprCiklumEvents
 
Pavel kravchenko obj c runtime
Pavel kravchenko obj c runtimePavel kravchenko obj c runtime
Pavel kravchenko obj c runtimeDneprCiklumEvents
 
Kirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталяхKirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталяхDneprCiklumEvents
 
Dmitry pilipenko i os gamekit
Dmitry pilipenko i os gamekitDmitry pilipenko i os gamekit
Dmitry pilipenko i os gamekitDneprCiklumEvents
 

More from DneprCiklumEvents (17)

Convert estimates to plans (Maxym Mykhalchuk Ciklum)
Convert estimates to plans (Maxym Mykhalchuk Ciklum)Convert estimates to plans (Maxym Mykhalchuk Ciklum)
Convert estimates to plans (Maxym Mykhalchuk Ciklum)
 
Time management training (Vadim Tikanov Ciklum)
Time management training (Vadim Tikanov Ciklum)Time management training (Vadim Tikanov Ciklum)
Time management training (Vadim Tikanov Ciklum)
 
Vladimir kozhayev handmade isometry
Vladimir kozhayev handmade isometryVladimir kozhayev handmade isometry
Vladimir kozhayev handmade isometry
 
Pavel yuriychuk svg in game development
Pavel yuriychuk svg in game developmentPavel yuriychuk svg in game development
Pavel yuriychuk svg in game development
 
Vitaly hit' abc_of_game_development
Vitaly hit' abc_of_game_developmentVitaly hit' abc_of_game_development
Vitaly hit' abc_of_game_development
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
 
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
 
03 net saturday anton samarskyy ''document oriented databases for the .net pl...
03 net saturday anton samarskyy ''document oriented databases for the .net pl...03 net saturday anton samarskyy ''document oriented databases for the .net pl...
03 net saturday anton samarskyy ''document oriented databases for the .net pl...
 
01 net saturday alex krakovetskiy ''asp.net scaffolding''
01 net saturday alex  krakovetskiy ''asp.net scaffolding''01 net saturday alex  krakovetskiy ''asp.net scaffolding''
01 net saturday alex krakovetskiy ''asp.net scaffolding''
 
Taras Kalapun ui testing
Taras Kalapun ui testingTaras Kalapun ui testing
Taras Kalapun ui testing
 
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apSergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
 
Segey Glebov tips and tricks for modern mobile project management
Segey Glebov tips and tricks for modern mobile project managementSegey Glebov tips and tricks for modern mobile project management
Segey Glebov tips and tricks for modern mobile project management
 
Pavel kravchenko obj c runtime
Pavel kravchenko obj c runtimePavel kravchenko obj c runtime
Pavel kravchenko obj c runtime
 
Kirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталяхKirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталях
 
Dmitry pilipenko i os gamekit
Dmitry pilipenko i os gamekitDmitry pilipenko i os gamekit
Dmitry pilipenko i os gamekit
 

Recently uploaded

TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...Nguyen Thanh Tu Collection
 
French Revolution (फ्रेंच राज्यक्रांती)
French Revolution  (फ्रेंच राज्यक्रांती)French Revolution  (फ्रेंच राज्यक्रांती)
French Revolution (फ्रेंच राज्यक्रांती)Shankar Aware
 
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
أَسَانِيدُ كُتُبِ وَأُصُولِ النَّشْرِ لِابْنِ الْجَزَرِيِّ وَالْوَصْلُ بِهَا....
أَسَانِيدُ كُتُبِ وَأُصُولِ النَّشْرِ لِابْنِ الْجَزَرِيِّ وَالْوَصْلُ بِهَا....أَسَانِيدُ كُتُبِ وَأُصُولِ النَّشْرِ لِابْنِ الْجَزَرِيِّ وَالْوَصْلُ بِهَا....
أَسَانِيدُ كُتُبِ وَأُصُولِ النَّشْرِ لِابْنِ الْجَزَرِيِّ وَالْوَصْلُ بِهَا....سمير بسيوني
 

Recently uploaded (6)

TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
 
LAR MARIA MÃE DE ÁFRICA .
LAR MARIA MÃE DE ÁFRICA                 .LAR MARIA MÃE DE ÁFRICA                 .
LAR MARIA MÃE DE ÁFRICA .
 
French Revolution (फ्रेंच राज्यक्रांती)
French Revolution  (फ्रेंच राज्यक्रांती)French Revolution  (फ्रेंच राज्यक्रांती)
French Revolution (फ्रेंच राज्यक्रांती)
 
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
أَسَانِيدُ كُتُبِ وَأُصُولِ النَّشْرِ لِابْنِ الْجَزَرِيِّ وَالْوَصْلُ بِهَا....
أَسَانِيدُ كُتُبِ وَأُصُولِ النَّشْرِ لِابْنِ الْجَزَرِيِّ وَالْوَصْلُ بِهَا....أَسَانِيدُ كُتُبِ وَأُصُولِ النَّشْرِ لِابْنِ الْجَزَرِيِّ وَالْوَصْلُ بِهَا....
أَسَانِيدُ كُتُبِ وَأُصُولِ النَّشْرِ لِابْنِ الْجَزَرِيِّ وَالْوَصْلُ بِهَا....
 

02 net saturday roman gomolko ''mvvm in javascript using knockoutjs''

  • 1. Write less, do more MVVM in JavaScript using KnockoutJS
  • 2. Извечная проблема Model Приложение MVVM MVC MVP View
  • 3. MVVM A ViewModel is basically a value converter on steroids. Josh Smith  Model View Model View
  • 5. <svg> <circle id="circle" cx="110" cy="110" r="50" stroke="red" fill="transparent“ /> </svg> <div> Radius: <input type="range" min="10" max="100" step="1" id="radius" value="50" /> Color: <input type="text"id="color" value="red" /> varcircle = document.getElementById('circle'), radiusField = document.getElementById('radius'), colorField = document.getElementById('color'); radiusField.onchange = function () { circle.setAttribute('r', radiusField.value); } colorField.onchange = function () { circle.setAttribute('stroke', colorField.value); } Лучшая архитектура – её отсутствие
  • 6. <svg> <circle id="circle" cx="110" cy="110" r="50" stroke="red" fill="transparent“ /> <text id="radiusLabel"></text> </svg> Radius: <input type="range" min="10" max="100" step="1" id="radius" value="50" /> Color: <input type="text"id="color" value="red" /> varcircle = document.getElementById('circle'), radiusField = document.getElementById('radius'); colorField = document.getElementById('color'); circle.onclick = function () { var c = random_color(); circle.setAttribute('stroke', colorField.value); colorField.value = c; } circle.onresize = function () { radiusField.value = circle.getAttribute('r'); radiusLabel.innerText = radiusField.value + 'px'; } radiusField.onchange = function () { circle.setAttribute('r', radiusField.value); radiusLabel.innerText = radiusField.value + 'px'; } colorField.onchange = function () { circle.setAttribute('stroke', colorField.value); } Лучшая архитектура – её отсутствие
  • 7. Лучшая архитектура – её отсутствие varui = { radius: 50, color: 'red', setRadius: function (r) { this.radius = r; circle.setAttribute('radius'); radiusField.value = r; radiusLabel.innerText = radius + 'px'; }, setColor: function (c) { this.color = c; circle.setAttribute('stroke', color); colorField.value = c; } } circle.onclick = function () { var c = random_color(); ui.setColor(c); } colorField.onchange = function () { ui.setColor(colorField.value); } circle.onresize = function (radius) { ui.setRadius(radius); } radiusField.onchange = function () { ui.setRadius(radiusField.value); }
  • 8. <svg> <circle cx="200" cy="200" fill="transparent" data-bind="?" /> <text data-bind="?"></text> </svg> Radius: <input type="range" min="10" max="100" step="1" data-bind="?" /> Color: <input type="text" data-bind="?" /> varui = { radius: 50, color: 'red', randomizeColor: function () { this.color = random_color(); }, resize: function(r) { this.radius = r; } }; Мечтать не вредно
  • 9. Декларативное связывание Автоматическое обновление UI Отслеживание зависимостей Templaiting Полная автономность Совместимость с любым JavaScript framework’ом Отличная документация
  • 10. <svg> <circle cx="200" cy="200" fill="transparent" data-bind=" attr: { stroke: color, r: radius }, click: randomizeColor, resize: resize " /> <text data-bind="text: radius() + 'px'" ></text> </svg> Radius: <input type="range" min="10" max="100" step="1" data-bind="value: radius" /> Color: <input type="text" data-bind="value: color" /> varviewModel = { radius: ko.observable(50), color: ko.observable('red'), randomizeColor: function () { this.color(random_color()); }, resize: function(r) { this.radius(r); } }; ko.applyBindings(viewModel); KnockoutJS – а код-то где?