arayüzün ardında yer alan veri modelinin etkileşimini yönetmek zorlu ve karmaşık bir işGr. Örneğin, web ortamında çalışan bir ekranda alışveriş sepeGne eklenen ürünlerin eklenip çıkarılması işlemi hem arayüz üzerinde, hem de arayüzün hemen ardında bulunan veri üzerinde değişiklik yapılmasını gerekGrir.
etkileşimini yönetmek için Javascript diliyle gelişGrilmişGr. Böylece Knockout sayesinde, veri üzerinde meydana gelen bir değişiklikle arayüzün ilgili kısmının otomaGk olarak ve basit bir şekilde güncellenmesi sağlanır. Sonuç olarak, gelişGricileri bu yöneGm işinin kodlama karmaşıklığından ve çıkmazlarından sıyrılmasına yardımcı olur.
veri arasındaki etkileşimi yöneten ve bu yöneGm karmaşıklığını basite indirger. • Knockout kütüphanesi, Model-‐View-‐ ViewModel tasarım desenini kullanır.
belli bir manTksal kurgu şeklindeki halini ifade eder. • View : Verilerin arayüzde gösterilmesini sağlayan tüm herşeyi içeren kısımdır. Örneğin : Üyelik oluşturmayı sağlayan HTML sayfası gibi. • ViewModel : Databinding yapıları sayesinde Model ve View arasında bağdaşTrıcılık görevi yapar.
Server-‐side veya client-‐side herhangi bir teknolojiyle çalışabilir. • Yazılım mimarisinde herhangi bir köklü değişiklik gerekGrmeden projeye entegre edilebilir. • Yaygın olarak kullanılan tüm tarayıcılarda çalışır. Örneğin, Mozilla Firefox, Google Chrome vb.
• JSON, diziler (arrays), döngü çeşitleri için UGlity özellikleri varsayılan olarak barındırır. • Arayüz ve veri arasındaki etkileşimi yönetmek basit ve esnekGr. • Javascript tabanlı diğer kütüphanelerle birlikte kullanılarak yüksek fayda sağlar. Örneğin, Jquery ile birlikte kullanılması gibi.
yerini almak amacıyla ortaya çıkmış bir kütüphane değildir. Aksine, JQuery ile birlikte kullanılabilir. • Knockout JS kütüphanesi sadece ölçeklenebilir ve veri yönelimli kullanıcı ekranları oluşturmaya odaklanmışTr. • Knockout JS kütüphanesi ile birlikte herhangi bir client-‐side ve server-‐side teknoloji kullanılabilir.
noktalarından biri de observable yapılardır. • Arayüz ile veri arasındaki etkileşimi sağlayan ve birbirine bağlayan temel yapıdır. • Observable yapılar veri üzerindeki değişiklikleri gözlemler. Herhangi bir değişim sonucunda arayüzün ilgili kısmını otomaGk olarak günceller.
ve veri setlemek aşağıdaki gibidir. var name = ko.observable(‘Mehmet’); • Oluşturulmuş olan observable yapı içinden veri aşağıdaki şekilde alınabilir. var nameValue = name(); // nameValue değişkeninde ‘Mehmet’ değeri bulunacakTr.
yeteneğine sahipGr. Arayüz ile veriyi birbirine bağlar. Observable yapılar ile benzerdir. • En önemli fark olarak computed yapılar içinde manTksal yapılar veya algoritmalar kurgulanabilir. Örneğin, girilen kullanıcı isim ve soy isim bilgisinin bir bütün halinde gösterilmesi gibi. • ko.applyBindigs kod saTrı tüm observable yapıları akGf hale geGrilir.
fazla observable yapılar bulunabilir. var name = ko.observable(‘Mehmet’); var lastName = ko.observable(‘Atak’); var fullName = ko.computed({ return name() + ‘ -‐ ’ + lastName(); }, this);
veri okuma yapılabildiği gibi aynı zamanda veri yazmakta mümkündür. • pureComputed alanlar ile birlikte veri yazma işlemide yapılabilir. var fruits = ko.pureComputed(funcGon() { read : funcGon() { // okuma ile ilgili kod bloğu }, write : funcGon(value) { // yazma ile ilgili kod bloğu }, owner : this });
veriler tek bir değer ile ifade edilir. Bu durumlarda observable yapılar kullanılır. • Fakat, bir dizi, liste veya veri kümesi olduğu durumlarda ise ObservableArray kullanılması gerekmektedir. Bu yapılarda var olan veri dizisi üzerinde gözlemleme yapar. Veri dizisi üzerinde bir değişiklik meydana geldiğinde arayüzde ilgili kısımda otomaGk güncelleme yapılır.
çıkarılan ürünleri anlık olarak güncellemek istenildiğinde observableArray yapısını kullanılabilir. var shoppingChart = ko.observableArray(); var urunListesi = [‘Bilgisayar’, ‘Tablet’]; shoppingChart(urunListesi);
push : listeye eleman ekler. pop : listenin son elemanını alır ve listeden çıkarır. remove : ilgili elemanı listeden çıkarır. removeAll : listedeki tüm elemanları çıkarır. indexOf : ilgili elemanın listenin kaçıncı indiste olduğunu verir. sort : listeyi sıralamayı sağlar. reverse : listeyi tersine çevirir. • Bunun dışında daha bir çok özellik bulunmaktadır.
Gpte binding yapıları mevculur. Genellikle, var olan bir HTML elemenGnin yazı alanına binding örnekleri yapıldı. • Bunun dışında html, style, visible, aCribute, css ve benzeri özelliklere de observable yapılar aracılığıyla binding yapılabilir.
görünürlülüğü değişGrilebilir. Örneğin, girilen email bilgisinin uygun formala olmaması durumunda alt kısımda uyarı mesajının görünür olması gibi. <div data-‐bind=“visible : showWarning”></div>
bir takım kontrol ifadelerini kullanabilmeye imkan tanır. Özellikle foreach döngüsü, if binding gibi bir kontrol mekanizmaları en çok kullanılanlarıdır. • Kontrol mekanizmaları : foreach, if, ifnot, with, component …
şeklindeki yapılar üzerinde döngü kurulabilmesini sağlar. Örneğin, bilgisayar markalarının ekrana foreach ile yazdırılması gibi. <div data-‐bind=“foreach: computers”> // Her iterasyonda tekrarlanan HTML Kodları </div> ya da <!-‐ -‐ ko foreach : computers -‐ -‐> <!-‐ -‐ /ko -‐ -‐> Yukaridaki iki şekilde de tanımlanabilir.
binding context oluşturulur. Bu context içinde kalan tüm html elementler with ile oluşturulmuş context’e bağlıdır. <div data-‐bind=“with: customer”></div>
‘if’ içine yazılan koşul gerçekleşmez ise if ifadesi ile kapsanmış olan HTML elementleri HTML DOM ağacına eklenmez. Yani HTML sayfası içinde yer almaz. visible kullanıldığında ise HTML kısmı sayfada bulunur fakat görünürlük özelliği false yapılır.
veri modeli olarak bileşen haline geGrilmiş modüler ve yeniden kullanılabilir yapılar hazırlanabilir. • Böylece kendi içinde çalışabilen bileşenler hazırlanmış olur. Aynı bileşen defalarca kez kullanılabilir. ko.components.register('some-‐component-‐name', { viewModel: <see below>, template: <see below> });
birlikte HTML form bileşenlerinin çeşitli özelliklerine binding işlemi yapılabilir. Böylece, ilgili HTML bileşenin Tklama olayı, CSS özellikleri, görünürlüğü gibi birçok özelliği dinamik olarak güncellenebilir ve değişGrilebilir.
teknolojiyle birlikte çalışabilir. Aynı zamanda veri kaynağı olarak web servislerinden gelen verileri kullanabilir. Jquery yardımıyla AJAX çağrısı yapılarak web servisten veri listesi alınıp Knockout ‘observableArray’ ile birlikte kullanılacakTr.