﻿
{"id":3295,"date":"2015-09-22T17:16:56","date_gmt":"2015-09-22T17:16:56","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=3295"},"modified":"2015-09-22T20:45:18","modified_gmt":"2015-09-22T20:45:18","slug":"knockoutjs-nedir-ne-amacla-nasil-kullanilir","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/knockoutjs-nedir-ne-amacla-nasil-kullanilir\/","title":{"rendered":"KnockoutJS Nedir? Ne Ama\u00e7la, Nas\u0131l Kullan\u0131l\u0131r?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131m\u0131zda web sayfalar\u0131nda kaynak kodlar\u0131 olduk\u00e7a sade ve anla\u015f\u0131l\u0131r bir yap\u0131da dizayn etmemizi sa\u011flayan bir JavaScript k\u00fct\u00fcphanesinden bahsedece\u011fiz.<\/p>\n<p>Hemen ba\u015flayal\u0131m..<\/p>\n<p><strong>KnockoutJS Nedir?<\/strong><br \/>\nMVVM(Model View ViewModel) Presentation Model mimarisi temelinde tasarlanan bir JavaScript k\u00fct\u00fcphanesidir.<\/p>\n<p>Hemen MVVM&#8217;in ne oldu\u011funa de\u011finmek gerekirse a\u015fa\u011f\u0131daki \u015fablonla izah edebilirim.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/MVVM-Yap\u0131s\u0131.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3296\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/MVVM-Yap\u0131s\u0131.png\" alt=\"MVVM Yap\u0131s\u0131\" width=\"606\" height=\"233\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/MVVM-Yap\u0131s\u0131.png 606w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/MVVM-Yap\u0131s\u0131-300x115.png 300w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/a><\/p>\n<p>Yukar\u0131daki \u015fablondan da g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, biz yaz\u0131l\u0131mc\u0131lar\u0131 ayn\u0131 kodlar\u0131 yazmaktan ka\u00e7\u0131nd\u0131ran, \u00fc\u00e7 katman\u0131nda birbiriyle ayr\u0131 olarak etkile\u015fim kurdu\u011fu, projenin \u00f6l\u00e7eklenebilmesi a\u00e7\u0131s\u0131ndan faydal\u0131 bir tasar\u0131m desenidir diyebiliriz.<\/p>\n<p>Bu tasar\u0131m deseni sayesinde, b\u00fcy\u00fck projelerde de\u011fi\u015fiklikler ya da g\u00fcncellemelerde olabilecek t\u00fcm zahmet ve y\u0131k\u0131mlardan ar\u0131nd\u0131r\u0131lm\u0131\u015f olunmaktad\u0131r.Do\u011frudan kolayca bir \u015feyleri de\u011fi\u015ftirmeye imkan tan\u0131maktad\u0131r.<\/p>\n<p>Bu tasar\u0131m deseni teknik olarak, View&#8217;\u0131n Modeli bilmesinin gereklili\u011fini ortadan kald\u0131rd\u0131\u011f\u0131 gibi, aray\u00fcz yapan ki\u015finin de arka tarafta nas\u0131l bir i\u015f geli\u015ftirildi\u011fini bilmeden ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Yukar\u0131daki \u015feymay\u0131 tekrardan ele al\u0131rsak e\u011fer,<\/p>\n<ul>\n<li><em><strong>View<\/strong><\/em>, verinin(data) sunuldu\u011fu katmand\u0131r.<\/li>\n<li><em><strong>ViewModel<\/strong><\/em>, Model ile View aras\u0131nda etkile\u015fim kuran, birnevi birbirine ba\u011flayan(Binding) katman\u0131d\u0131r.<\/li>\n<li><em><strong>Model<\/strong> <\/em>ise, uygulama i\u00e7erisinde kullanaca\u011f\u0131m\u0131z veri(data)d\u0131r.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>\u015eemadan da anla\u015f\u0131ld\u0131\u011f\u0131 \u00fczere; View, ViewModel sayesinde Model katman\u0131na eri\u015fmekte ve kullan\u0131c\u0131 talebine cevap vermektedir.<\/p>\n<p>Her ne kadar ben haklar\u0131nda bir bilgi bilmesemde Silverlight\u00a0ve WPF mimarileride bu deseni kullanmaktad\u0131r.<\/p>\n<p><strong>KnockoutJS Ne Ama\u00e7la Kullan\u0131l\u0131r?<\/strong><br \/>\nAsl\u0131nda bu sorunun cevab\u0131 \u015fudur demek yanl\u0131\u015f olacakt\u0131r.Lakin yaz\u0131m\u0131z\u0131n ba\u015f\u0131nda da belirtti\u011fim \u00fczere kaynak kodlarda sade ve anla\u015f\u0131l\u0131r bir yap\u0131 kullanmak, kullan\u0131c\u0131 etkile\u015fimini artt\u0131rmak, karma\u015f\u0131kl\u0131\u011f\u0131 ve kod kalabal\u0131\u011f\u0131n\u0131 azaltmak esas ama\u00e7 edinildi\u011finden dolay\u0131 tercih edebilirsiniz.<\/p>\n<p><strong>KnockoutJS Nas\u0131l Kullan\u0131l\u0131r?<\/strong><br \/>\nBu yaz\u0131m\u0131zda KnockoutJS&#8217;ye prosed\u00fcrel olarak temelden girece\u011fiz ve mimarisel yap\u0131y\u0131 kodlar \u00fczerinden tan\u0131t\u0131rken, hem nas\u0131l kullan\u0131d\u0131\u011f\u0131na hem de kullan\u0131rken nelere ihtiyac\u0131m\u0131z oldu\u011funa de\u011finmi\u015f olaca\u011f\u0131z.<\/p>\n<p>\u00d6ncelikle KnockoutJS k\u00fct\u00fcphanesini projemizde kullanabilmemiz i\u00e7in a\u015fa\u011f\u0131daki dosyalar\u0131 ilgili projeye import etmemiz gerekmektedir.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/jquery-2.1.4.min_.rar\">JQuery<\/a><br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/knockout-3.3.0.rar\">KnockoutJS <\/a><\/p>\n<blockquote><p><em>Dikkat!!!<\/em><br \/>\n<em> Yukar\u0131da vemri\u015f oldu\u011fum dosyalar bu yaz\u0131n\u0131n yay\u0131nland\u0131\u011f\u0131 tarihteki son s\u00fcr\u00fcm\u00fcd\u00fcr.\u0130lgili dosyalar\u0131n zamanla g\u00fcncellenmi\u015f s\u00fcr\u00fcmleri yay\u0131nlanm\u0131\u015f olabilir.O y\u00fczden bu uyar\u0131y\u0131 baz alarak \u00e7al\u0131\u015fmalar\u0131n\u0131z\u0131 g\u00fcncel versiyonlarda ger\u00e7ekle\u015ftirmeye dikkat ediniz.<\/em><\/p><\/blockquote>\n<p>Projeye import edilen dosyalar\u0131 a\u015fa\u011f\u0131daki gibi projeye eklemeliyiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;script src=&quot;~\/Scripts\/jquery-2.1.4.min.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;script src=&quot;~\/Scripts\/knockout-3.3.0.js&quot;&gt;&lt;\/script&gt;\r\n<\/pre>\n<p>\u015eimdi KnockoutJS k\u00fct\u00fcphanesinin MVVM mimarisine uyarlanm\u0131\u015f bir yap\u0131 olu\u015ftural\u0131m.<\/p>\n<p>\u00d6ncelikle &#8220;<em><strong>V:View<\/strong><\/em>&#8221; katman\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;table&gt;\r\n    &lt;tr&gt;\r\n        &lt;td&gt;Ad&lt;\/td&gt;\r\n        &lt;td&gt;&lt;input data-bind=&quot;value: Ad&quot; \/&gt;&lt;\/td&gt;\r\n        &lt;td data-bind=&quot;text: Ad&quot;&gt;&lt;\/td&gt;\r\n    &lt;\/tr&gt;\r\n    &lt;tr&gt;\r\n        &lt;td&gt;Soyad&lt;\/td&gt;\r\n        &lt;td&gt;&lt;input data-bind=&quot;value: Soyad&quot; \/&gt;&lt;\/td&gt;\r\n        &lt;td data-bind=&quot;text: Soyad&quot;&gt;&lt;\/td&gt;\r\n    &lt;\/tr&gt;\r\n    &lt;tr&gt;\r\n        &lt;td&gt;Memleket&lt;\/td&gt;\r\n        &lt;td&gt;&lt;input data-bind=&quot;value: Memleket&quot; \/&gt;&lt;\/td&gt;\r\n        &lt;td data-bind=&quot;text: Memleket&quot;&gt;&lt;\/td&gt;\r\n    &lt;\/tr&gt;\r\n    &lt;tr&gt;\r\n        &lt;td&gt;Ya\u015f&lt;\/td&gt;\r\n        &lt;td&gt;&lt;input data-bind=&quot;value: Yas&quot; \/&gt;&lt;\/td&gt;\r\n        &lt;td data-bind=&quot;text: Yas&quot;&gt;&lt;\/td&gt;\r\n    &lt;\/tr&gt;\r\n    &lt;tr&gt;\r\n        &lt;td&gt;Tam Bilgi&lt;\/td&gt;\r\n        &lt;td colspan=&quot;2&quot; data-bind=&quot;text: TamBilgi&quot;&gt;&lt;\/td&gt;\r\n    &lt;\/tr&gt;\r\n&lt;\/table&gt;\r\n<\/pre>\n<p>Yukar\u0131daki View yap\u0131s\u0131n\u0131 incelerseniz e\u011fer, kullan\u0131c\u0131ya bir verinin sunuldu\u011fu katman\u0131 \u00f6rneklendirmekteyiz.Dikkat ederseniz e\u011fer, &lt;input&gt; elemanlar\u0131nda &#8220;data-bind&#8221; objecti kullan\u0131lm\u0131\u015ft\u0131r.Bu object ile nesneleri birbirine ba\u011fl\u0131yoruz.Yani <strong>Bind<\/strong> ediyoruz.<\/p>\n<p>\u00d6rnek olarak Ad b\u00f6l\u00fcm\u00fcn\u00fc ele al\u0131rsak e\u011fer, input eleman\u0131ndaki &#8220;data-bind=&#8221;value: Ad&#8221;&#8221; ile td deki &#8220;data-bind=&#8221;text: Ad&#8221;&#8221; datalar\u0131n birbirine ba\u011fl\u0131yoruz.Buradaki kullan\u0131mda verilen &#8220;Ad&#8221; de\u011fi\u015fkeni ViewModel&#8217;de ki(yani Datadaki) &#8220;Ad&#8221; \u00f6zelli\u011finin kar\u015f\u0131l\u0131\u011f\u0131d\u0131r.<\/p>\n<p>View katman\u0131nda yapt\u0131\u011f\u0131m\u0131z bu i\u015flemler neticesinde art\u0131k ViewModel katman\u0131m\u0131z\u0131 dizayn edebiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;script type=&quot;text\/javascript&quot;&gt;\r\n    function ViewModel() {\r\n        Ad = ko.observable(&quot;Gen\u00e7ay&quot;),\r\n        Soyad = ko.observable(&quot;Y\u0131ld\u0131z&quot;),\r\n        Memleket = ko.observable(&quot;Artvin\/Arhavi&quot;),\r\n        Yas = ko.observable(23),\r\n        TamBilgi = ko.computed(function () { return this.Ad() + &quot; &quot; + this.Soyad() + &quot; - &quot; + this.Memleket() + &quot; - &quot; + this.Yas() })\r\n    };\r\n&lt;\/script&gt;\r\n<\/pre>\n<p>Yukar\u0131 olu\u015fturmu\u015f oldu\u011fumuz ViewModel yap\u0131s\u0131n\u0131 incelerseniz e\u011fer property de\u011ferleri(Ad, Soyad, Memleket, Yas, TamBilgi) sanki Modelden \u00e7ekilmi\u015f gibi direkt olarak atanm\u0131\u015ft\u0131r.Burada propertylerin Bind edildi\u011fi nesnelere datay\u0131 vermesi i\u00e7i &#8220;observable&#8221; komutunu kullan\u0131yoruz.Bu komut sayesinde veriler Bind edilen nesnelere yollanacakt\u0131r.Bu \u00f6rne\u011fimizde &#8220;observable&#8221; metoduna verdi\u011fimiz veriler Bind edilen alanlara otomatik olarak atanacakt\u0131r.<\/p>\n<p>TamBilgi propertysi i\u00e7in, hesap komutu olan &#8220;Computed&#8221; kullan\u0131lmaktad\u0131r.&#8221;Ad&#8221;, &#8220;Soyad&#8221;, &#8220;Memleket&#8221; ve &#8220;Yas&#8221;<br \/>\nbirle\u015ftirilmi\u015ftir.Asl\u0131nda TamBilgi, &#8220;Ad&#8221;, &#8220;Soyad&#8221;, &#8220;Memleket&#8221; ve &#8220;Yas&#8221; propertylerine ba\u011flanm\u0131\u015ft\u0131r.Yani herhangi birinde olu\u015facak de\u011fi\u015fiklik TamBilgi propertysinide direkt olarak etkileyecektir.<\/p>\n<p>input elemanlar\u0131nda yap\u0131lan de\u011fi\u015fiklikler bind edildikleri alanlara da otomatik yans\u0131yacakt\u0131r.<\/p>\n<p>Son olarak, olu\u015fturdu\u011fumuz bu yap\u0131y\u0131 sa\u011fl\u0131kl\u0131 bir bi\u00e7imde kullanabilmek i\u00e7in ViewModel&#8217;imizi Knockout Objesine Bind etmemiz gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;script type=&quot;text\/javascript&quot;&gt;\r\n    $(document).ready(function () {\r\n        ko.applyBindings(ViewModel());\r\n    });\r\n&lt;\/script&gt;\r\n<\/pre>\n<p>Yapm\u0131\u015f oldu\u011fumuz bu i\u015flemler neticesinde a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fclerinden projenin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131 hakk\u0131nda g\u00f6rsel fikriniz olu\u015facakt\u0131r.<\/p>\n<div id=\"attachment_3301\" style=\"width: 360px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/KnockoutJS-Nedir-Ne-Ama\u00e7la-Nas\u0131l-Kullan\u0131l\u0131r.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3301\" class=\"wp-image-3301 size-full\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/KnockoutJS-Nedir-Ne-Ama\u00e7la-Nas\u0131l-Kullan\u0131l\u0131r.png\" alt=\"KnockoutJS Nedir Ne Ama\u00e7la, Nas\u0131l Kullan\u0131l\u0131r\" width=\"350\" height=\"130\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/KnockoutJS-Nedir-Ne-Ama\u00e7la-Nas\u0131l-Kullan\u0131l\u0131r.png 350w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/KnockoutJS-Nedir-Ne-Ama\u00e7la-Nas\u0131l-Kullan\u0131l\u0131r-300x111.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><p id=\"caption-attachment-3301\" class=\"wp-caption-text\">Projenin ilk a\u00e7\u0131ld\u0131\u011f\u0131 an<\/p><\/div>\n<div id=\"attachment_3302\" style=\"width: 483px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/KnockoutJS-Nedir-Ne-Ama\u00e7la-Nas\u0131l-Kullan\u0131l\u0131r-2.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3302\" class=\"wp-image-3302 size-full\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/KnockoutJS-Nedir-Ne-Ama\u00e7la-Nas\u0131l-Kullan\u0131l\u0131r-2.png\" alt=\"KnockoutJS Nedir Ne Ama\u00e7la, Nas\u0131l Kullan\u0131l\u0131r - 2\" width=\"473\" height=\"130\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/KnockoutJS-Nedir-Ne-Ama\u00e7la-Nas\u0131l-Kullan\u0131l\u0131r-2.png 473w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2015\/09\/KnockoutJS-Nedir-Ne-Ama\u00e7la-Nas\u0131l-Kullan\u0131l\u0131r-2-300x82.png 300w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><\/a><p id=\"caption-attachment-3302\" class=\"wp-caption-text\">\u00dczerinde g\u00fcncelle\u015ftirme yap\u0131ld\u0131\u011f\u0131 an<\/p><\/div>\n<p>Evet arkada\u015flar, bu yaz\u0131m\u0131z\u0131nda sonuna gelmi\u015f bulunmaktay\u0131z.Zamanla KnockoutJS \u00fczerinde derinlemesine yaz\u0131lar yazaca\u011f\u0131m.\u015eimdilik burada giri\u015f niteli\u011finde b\u0131rakal\u0131m.<\/p>\n<p>Bol bol faydalanman\u0131z dile\u011fiyle&#8230;<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar dilerim&#8230;<\/p>\n<p>Kaynak : http:\/\/www.borakasmer.com\/knockoutjsi-derinlemesine-inceleme\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131m\u0131zda web sayfalar\u0131nda kaynak kodlar\u0131 olduk\u00e7a sade ve anla\u015f\u0131l\u0131r bir yap\u0131da dizayn etmemizi sa\u011flayan bir JavaScript k\u00fct\u00fcphanesinden bahsedece\u011fiz. Hemen ba\u015flayal\u0131m.. KnockoutJS Nedir? MVVM(Model View ViewModel) Presentation Model mimarisi temelinde tasarlanan bir JavaScript k\u00fct\u00fcphanesidir.&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":3014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[796],"tags":[806,804,797,800,799,798,284,802,801,805,803,120,807],"class_list":["post-3295","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-knockoutjs","tag-applybindings","tag-data-bind","tag-knockoutjs","tag-knockoutjs-nasil-kullanilir","tag-knockoutjs-ne-amacla-kullanilir","tag-knockoutjs-nedir","tag-model","tag-model-view-viewmodel","tag-mvvm","tag-observable","tag-presentation-model","tag-view","tag-viewmodel"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/3295","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=3295"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/3295\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3014"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=3295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=3295"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=3295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}