KnockoutJS - Bağımlılık İzleme

KnockoutJs, değerler güncellendiğinde bağımlılıkları otomatik olarak izler. Adında tek bir nesnesi vardependency tracker (ko.dependencyDetection) bağımlılıklara abone olmak için iki taraf arasında bir aracı görevi görür.

Bağımlılık izleme algoritması aşağıdadır.

Step 1 - Hesaplanmış bir gözlemlenebilir ilan ettiğinizde, KO, başlangıç ​​değerini almak için hemen değerlendirici fonksiyonunu çağırır.

Step 2- Abonelik, değerlendiricinin okuduğu herhangi bir gözlemlenebilir olana ayarlanmıştır. Bir uygulamada, artık kullanılmayan eski abonelikler atılır.

Step 3 - KO nihayet güncellenmiş hesaplanmış gözlemlenebilir olanı bilgilendirir.

Example

<!DOCTYPE html>
<html>
   <head>
      <title>KnockoutJS How Dependency Tracking Works</title>
      <!-- CDN's-->
      <script src = "https://ajax.aspnetcdn.com/ajax/knockout/knockout-3.1.0.js"
         type = "text/javascript"></script>
   </head>
   
   <body>
      <div>
         <form data-bind = "submit: addFruits">
            <b>Add Fruits:</b>
            <input data-bind = 'value: fruitToAdd, valueUpdate: "afterkeydown"'/>
            <button type = "submit" data-bind = "enable: fruitToAdd().length > 0">Add</button>
            <p><b>Your fruits list:</b></p>
            <select multiple = "multiple" width = "50" data-bind = "options: fruits"> </select>
         </form>
      </div>
      
      <script>
         var Addfruit = function(fruits) {
            this.fruits = ko.observableArray(fruits);
            this.fruitToAdd = ko.observable("");
            
            this.addFruits = function() {
               
               if (this.fruitToAdd() != "") {
                  this.fruits.push(this.fruitToAdd());   // Adds a fruit
                  this.fruitToAdd("");                   // Clears the text box
               }
                
            }.bind(this);                                // "this" is the view model
         };

         ko.applyBindings(new Addfruit(["Apple", "Orange", "Banana"]));
      </script>
      
   </body>
</html>

Output

Yukarıdaki kodun nasıl çalıştığını görmek için aşağıdaki adımları uygulayalım -

  • Yukarıdaki kodu şuraya kaydedin: dependency_tracking.htm dosya.

  • Bu HTML dosyasını bir tarayıcıda açın.

  • Herhangi bir meyve adı girin ve Ekle düğmesini tıklayın.

Peek Kullanarak Bağımlılıkları Kontrol Etme

Computed Observable'a, bir bağımlılık oluşturmadan, peekişlevi. Hesaplanan özelliği güncelleyerek Gözlemlenebilir'i kontrol eder.

Example

<!DOCTYPE html>
<html>
   <head>
      <title>KnockoutJs Controlling Dependencies Using Peek</title>
      <!-- CDN's-->
      <script src = "https://ajax.aspnetcdn.com/ajax/knockout/knockout-3.1.0.js"
         type = "text/javascript"></script>
   </head>
   
   <body>
      <div class = "logblock">
         <h3>Computed Log</h3>
         <pre class = "log" data-bind = "html: computedLog"></pre>
      </div>

      <script>
         function AppData() {
            this.firstName = ko.observable('John');
            this.lastName = ko.observable('Burns');
            this.computedLog = ko.observable('Log: ');
            
            this.fullName = ko.computed(function () {
               var value = this.firstName() + " " + this.lastName();
               this.computedLog(this.computedLog.peek() + value + '; <br/>');
               return value;
            }, this);

            this.step = ko.observable(0);
            this.next = function () {
               this.step(this.step() === 2 ? 0 : this.step()+1);
            };
         };
         
         ko.applyBindings(new AppData());
      </script>
      
   </body>
</html>

Output

Yukarıdaki kodun nasıl çalıştığını görmek için aşağıdaki adımları uygulayalım -

  • Yukarıdaki kodu şuraya kaydedin: dependency_tracking_peek.htm dosya.

  • Bu HTML dosyasını bir tarayıcıda açın.

Gözlemler

Hesaplanmış Bağımlılık İçerisindeki Bağımlılıkları Yoksaymak

ko.ignoreDependenciesişlevi, hesaplanan bağımlılıklar içinde izlemek istemediğiniz bağımlılıkları görmezden gelmenize yardımcı olur. Söz dizimi aşağıdadır.

ko.ignoreDependencies( callback, callbackTarget, callbackArgs );

Döngüsel Bağımlılıklar Neden Anlamlı Değil?

KO, bir Hesaplanmış Gözlenebilirliği değerlendiriyorsa, bağımlı Hesaplanmış Gözlemlenebilir'in bir değerlendirmesini yeniden başlatmayacaktır. Bu nedenle, bağımlılık zincirlerinize döngüleri dahil etmenin bir anlamı yoktur.