KnockoutJS - Gözlemlenebilirler
KnockoutJS, aşağıdaki 3 önemli kavram üzerine inşa edilmiştir.
Gözlemlenebilirler ve aralarındaki bağımlılık takibi - DOM öğeleri ViewModel'e 'veri bağlama' yoluyla bağlanır. Gözlemlenebilirler aracılığıyla bilgi alışverişinde bulunurlar. Bu, bağımlılık takibini otomatik olarak halleder.
UI ve ViewModel arasındaki Bildirime Dayalı Bağlamalar - DOM öğeleri, ViewModel'e 'veri bağlama' konsepti aracılığıyla bağlanır.
Yeniden kullanılabilir bileşenler oluşturmak için şablon oluşturma - Şablon oluşturma, karmaşık web uygulamaları oluşturmak için sağlam bir yol sağlar.
Bu bölümde Gözlemlenebilirleri inceleyeceğiz.
Adından da anlaşılacağı gibi, bir ViewModel verisini / özelliğini Gözlemlenebilir olarak bildirdiğinizde, her seferinde herhangi bir veri değişikliği, verilerin kullanıldığı tüm yerlerde otomatik olarak yansıtılır. Bu, ilgili bağımlılıkları yenilemeyi de içerir. KO bunlarla ilgilenir ve bunu başarmak için fazladan kod yazmaya gerek yoktur.
Observable kullanarak, UI ve ViewModel'in dinamik olarak iletişim kurması çok kolay hale geliyor.
Sözdizimi
ViewModel özelliğini işlevle bildirmeniz yeterlidir. ko.observable() Gözlenebilir hale getirmek için.
this.property = ko.observable('value');
Misal
Observable'ın kullanımını gösteren aşağıdaki örneğe bir göz atalım.
<!DOCTYPE html>
<head>
<title>KnockoutJS Observable Example</title>
<script src = "https://ajax.aspnetcdn.com/ajax/knockout/knockout-3.1.0.js"
type = "text/javascript"></script>
</head>
<body>
<!-- This is called "view" of HTML markup that defines the appearance of UI -->
<p>Enter your name: <input data-bind = "value: yourName" /></p>
<p>Hi <strong data-bind = "text: yourName"></strong> Good Morning!!!</p>
<script>
<!-- This is called "viewmodel". This javascript section defines the data and behavior of UI -->
function AppViewModel() {
this.yourName = ko.observable("");
}
// Activates knockout.js
ko.applyBindings(new AppViewModel());
</script>
</body>
</html>
Aşağıdaki satır giriş kutusu içindir. Görüldüğü gibi, isim değerinizi ViewModel'e bağlamak için data-bind özelliğini kullandık.
<p>Enter your name: <input data-bind = "value: yourName" /> <p>
Aşağıdaki satır yalnızca adınızın değerini yazdırır. Burada veri bağlama türünün, sadece değeri okuduğumuz için metin olduğuna dikkat edin.
<p>Hi <strong data-bind = "text: yourName"></strong> Good Morning!!!</p>
Aşağıdaki satırda, ko.observable verilerdeki herhangi bir değişiklik için yourName değişkenine göz kulak olur. Bir değişiklik olduğunda, ilgili yerler de değiştirilen değerle güncellenir. Aşağıdaki kodu çalıştırdığınızda, bir giriş kutusu görünecektir. Bu giriş kutusunu güncellediğinizde, yeni değer kullanıldığı her yerde yansıtılır veya yenilenir.
this.yourName = ko.observable("");
Çıktı
Yukarıdaki kodun nasıl çalıştığını görmek için aşağıdaki adımları uygulayalım -
Yukarıdaki kodu şuraya kaydedin: first_observable_pgm.htm dosya.
Bu HTML dosyasını bir tarayıcıda açın.
Adı Scott olarak girin ve adın çıktıda yansıtıldığını gözlemleyin.
Veri değişikliği, kullanıcı arayüzünden veya ViewModel'den yapılabilir. Verilerin nereden değiştirildiğine bakılmaksızın, UI ve ViewModel aralarında senkronizasyonu sürdürür. Bu, onu iki yönlü bir bağlama mekanizması yapar. Yukarıdaki örnekte, giriş kutusundaki adınızı değiştirdiğinizde, ViewModel yeni bir değer alır. Ad özelliğinizi ViewModel içinden değiştirdiğinizde, kullanıcı arabirimi yeni bir değer alır.
Gözlemlenebilirleri Okuma ve Yazma
Aşağıdaki tablo, Gözlemlenebilirler üzerinde gerçekleştirilebilecek okuma ve yazma işlemlerini listeler.
Sr.No. | Okuma / Yazma İşlemi ve Sözdizimi |
---|---|
1 | Read Değeri okumak için sadece Observable özelliğini aşağıdaki gibi parametreler olmadan çağırın: AppViewModel.yourName (); |
2 | Write Gözlemlenebilir özelliğinde değer yazmak / güncellemek için, aşağıdaki gibi parametrede istenen değeri iletmeniz yeterlidir: AppViewModel.yourName ('Bob'); |
3 | Write multiple Birden çok ViewModel özelliği, zincirleme sözdizimi yardımıyla tek bir satırda güncellenebilir, örneğin: AppViewModel.yourName ('Bob'). YourAge (45); |
Gözlemlenebilir Diziler
Gözlemlenebilir beyan, tek bir nesnenin veri değişikliklerini ele alır. ObservableArray, nesnelerin koleksiyonuyla çalışır. Bu, birden çok türde değer içeren karmaşık uygulamalarla uğraşırken ve durumlarını kullanıcı eylemlerine göre sık sık değiştirirken çok kullanışlı bir özelliktir.
Sözdizimi
this.arrayName = ko.observableArray(); // It's an empty array
Gözlemlenebilir dizi, yalnızca hangi nesnelerin eklendiğini veya kaldırıldığını izler. Tek tek nesnenin özelliklerinin değiştirilip değiştirilmediğini bildirmez.
İlk Kez Başlatın
Dizinizi başlatabilir ve aynı zamanda ilk değerleri kurucuya aşağıdaki gibi ileterek onu Gözlemlenebilir olarak bildirebilirsiniz.
this.arrayName = ko.observableArray(['scott','jack']);
Gözlemlenebilir Diziden Okuma
Gözlemlenebilir dizi öğelerine aşağıdaki şekilde erişebilirsiniz.
alert('The second element is ' + arrayName()[1]);
ObservableArray Fonksiyonları
KnockoutJS kendi Gözlenebilir dizi işlevlerine sahiptir. Kullanışlılar çünkü -
Bu işlevler tüm tarayıcılarda çalışır.
Bu işlevler, bağımlılık takibini otomatik olarak halledecektir.
Sözdiziminin kullanımı kolaydır. Örneğin, bir diziye bir öğe eklemek için, arrayName () yerine arrayName.push ('value') kullanmanız gerekir. Push ('value').
Aşağıda çeşitli Gözlemlenebilir Dizi yöntemlerinin listesi verilmiştir.
Sr.No. | Yöntemler ve Açıklama |
---|---|
1 | itme ('değer') Dizinin sonuna yeni bir öğe ekler. |
2 | pop() Diziden son öğeyi kaldırır ve onu döndürür. |
3 | unshift ('değer') Dizinin başına yeni bir değer ekler. |
4 | vardiya() Diziden ilk öğeyi kaldırır ve onu döndürür. |
5 | tersine çevirmek() Dizinin sırasını tersine çevirir. |
6 | çeşit() Dizi öğelerini artan bir sırada sıralar. |
7 | ekleme (başlangıç dizini, bitiş dizini) 2 parametre kabul eder - başlangıç dizini ve bitiş dizini - öğeleri baştan sona dizinden kaldırır ve bir dizi olarak döndürür. |
8 | indexOf ('değer') Bu işlev, sağlanan ilk parametre oluşumunun dizinini döndürür. |
9 | dilim (başlangıç dizini, bitiş dizini) Bu yöntem, bir dizinin bir parçasını keser. Başlangıç dizininden bitiş dizinine kadar olan öğeleri döndürür. |
10 | hepsini kaldır() Tüm öğeleri kaldırır ve bir dizi olarak döndürür. |
11 | remove ('değer') Parametreyle eşleşen ve bir dizi olarak dönen öğeleri kaldırır. |
12 | kaldır (işlev (öğe) {koşul}) Koşulu sağlayan öğeleri kaldırır ve bir dizi olarak döndürür. |
13 | kaldır ([değerler kümesi]) Belirli bir değer kümesiyle eşleşen öğeleri kaldırır. |
14 | destroyAll() _Destroy özelliğine sahip bir dizideki tüm öğeleri true değeriyle işaretler. |
15 | destroy('value') Parametreye eşit bir öğeyi arar ve bunu true değerine sahip _destroy özel özelliği ile işaretler. |
16 | destroy(function(item) { condition}) Koşulu sağlayan tüm öğeleri bulur, onları gerçek değerle _destroy özelliğiyle işaretler. |
17 | destroy([set of values]) Belirli bir değer kümesiyle eşleşen öğeleri bulur, bunları gerçek değerle _destroy olarak işaretler. |
Note - ObservableArrays'den gelen Destroy ve DestroyAll Functions çoğunlukla sadece 'Ruby on Rails' geliştiricileri içindir.
Eğer yöntemini yok kullandığınızda, ilgili ürün gerçekten o anda diziden silinmez ancak mülkiyet ile işaretleyerek gizli yapılmış olan _destroy ile gerçek , arayüzde tarafından okunamaz böylece değer. _Destroy , true değerine eşit olarak işaretlenen öğeler daha sonra JSON nesne grafiği ile çalışırken silinir.