2013-07-08 6 views
7

Her 5 saniyede bir sayfadaki değerleri güncelleyen bir web sitesinde çalışıyorum, uzak bir veritabanına çağrı yapıyor ve Get Json aramasıyla MVC modeli döndürüyor, veKnockout.js - ko.mapping.fromJS - Görünür Bağlama güncellenmiyor

viewModel = ko.mapping.fromJS(model) numaralı telefonu arayın.

Daha sonra bu haritalama çağrıyı başka Get çağrısı kullanarak ve çağrı bu görünüm modeli her 5 saniyede güncelleştiriyorum sonra

viewModel = ko.mapping.fromJS(model, viewModel). 

bağlamaları veritabanından alınır orijinal model olarak benim HTML öğelerinde doğru olduğunu Ekranda görüntülenen ancak modelde IsVisible özelliği hiçbir şey olmadığında, yani tablo satırı görünmez olarak ayarlanmalı ve diğeri görünür olacak şekilde ayarlanmalıdır.

Her güncellemede model, diğer span'ın metin güncelleştirmesiyle birlikte görünür veya görünmez olacak şekilde ayarlanmış olarak farklı olmalıdır; bu bölüm çalışıyor ve güncelleştirmeler sayfada gösteriliyor, yalnızca görünürlük değişmiyor.

Görünmez görünmez sorunun HTML'yi, güncelleme aramasının Javascript'i ile uygulayın.

Modeldeki tüm değişkenler doğru şekilde adlandırıldı Modelini herkese açık olarak yayınlayamıyorum. Gösterge Çıkışı, selections.IsVisible değerini

ko.mapping.fromJS(model, {}, viewModel); 

Bu gerçekleşmediği takdirde ve çözebilirsiniz bir biçimde olduğundan emin olun:

<table class="SelectionTable" cellpadding="0" cellspacing="0"> 
    <tbody data-bind="foreach: { data: markets.Selections, as: 'selections' }"> 
     <tr class="Selection"> 
      <td><span data-bind='text: selections.Number, visible: selections.IsVisible'></span></td> 
      <td><span data-bind='text: selections.Name, visible: selections.IsVisible'></span></td> 
      <td><span data-bind='text: selections.CurrentPrice, visible: selections.IsVisible'></span></td> 
      <td><span data-bind='text: selections.OpeningPrice, visible: selections.IsVisible'></span></td> 
     </tr> 
    </tbody> 
</table> 

<script type="text/javascript"> 
    var viewModel; 
    var self; 

    var getUpdates = setInterval(function() { 
     $.getJSON(
      "/Home/Get", {}, 
      function (model) { 
       viewModel = ko.mapping.fromJS(model, viewModel); 
      }); 
    }, 5000); 

    $(document).ready(
     function() { 
      $.getJSON(
       "/Home/Get", {}, 
       function (model) { 
        viewModel = ko.mapping.fromJS(model); 
        bindViewModel(); 
       }); 
     }); 

    function bindViewModel() { 
     ko.applyBindings(viewModel); 
    } 
</script> 
+0

Görünen kodun, ne ilk veri yüklemesinde ne de sonraki güncellemelerde hiçbir zaman çalışmadığını mı söylüyorsunuz? –

+0

Üzgünüz, orjinal çağrı çalışır ve doğru satırları gösterir, ancak sonraki güncelleme çağrıları şu anda görünür olanı gizlemeyecek, ancak şimdi görünmez satırlara ayarlanmayacak veya orjinal olarak gizli olanı gösterecek, ancak şimdi görünür satırlara ayarlanacaktır. –

cevap

2

Bir ViewModel güncellerken bazen boş bir eşleme sağlamanız gerekir bulmak doğru ya da yanlış.

+0

"Boş haritalama" benim için çalıştı, soru şu: neden veya ne zaman? – Stefan

+0

, viewModel'i eşit olarak ayarlamadan ko.mapping.fromJS (model, {}, viewModel) çalıştırmanız yeterlidir. Bu durumda sadece gereksiz değil, 3. parametre olarak viewModel'i geçmek sadece bunu yapıyor. Boş {} sadece boş bir özel haritalama kullanmak anlamına gelir. – beauXjames

+0

Maalesef, bu işi yapmak için neden bazen boş bir haritalama yapmam gerektiğini anlamamıştım. Modeli görmek için sonucu atamak gerekmiyorsa haklısınız, bunu kaçırdınız! –