2013-07-08 19 views
7

私は5秒ごとにページの値を更新し、リモートデータベースを呼び出し、Get Json呼び出しでMVCモデルを返すWebサイトで作業しています。電話番号:Knockout.js - ko.mapping.fromJS - 可視バインディングが更新されない

viewModel = ko.mapping.fromJS(model)

私は、このマッピングコールを別のGet呼び出しを使用して呼び出し、このビューモデルごとに5秒を更新しています、その後

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

バインディングがデータベースから取得されたオリジナルモデルとしての私のHTML要素で正しいですモデル上のIsVisibleプロパティが何も起こらないとき、つまり表の行を不可視に設定し、別の設定をvisibleに設定する必要があります。

各更新でモデルが異なる必要があります。行が表示または非表示に設定され、他のスパンのテキストが更新され、この部分が機能し、更新がページに表示されます。

HTMLは、目に見えない目に見える問題を引き起こし、更新呼び出しのJavascriptを使用します。

モデルからのすべての変数が正しく呼び出されましたモデルを公開することはできません。 、という出力selections.IsVisibleの値を失敗

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

、それが解決できる形式であることを確認してください。私はあなたが時々のviewmodelを更新するとき、空のマッピングを提供する必要があることがわかり

<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

最初のデータの読み込みやその後の更新でも、表示されるコードは機能しないと言っていますか? –

+0

申し訳ありませんが、本来の動作で正しい行が表示されますが、現在表示されている行を非表示にすることはできませんが、非表示の行に設定されます。 –

答えて

2

trueまたはfalseに設定します。

+0

"空のマッピング"が私のために働いたが、質問は残っている:なぜ、いつ? – Stefan

+0

viewModelをequalに設定せずにko.mapping.fromJS(model、{}、viewModel)を実行するだけです。この場合は重複しているだけでなく、3番目のパラメータとしてviewModelを渡すだけです。空の{}は、単に空のカスタムマッピングを使用することを意味します。 – beauXjames

+0

申し訳ありませんが、私は時々この作業をするために空のマッピングを渡さなければならない理由を理解できませんでした。あなたはモデルを表示するために結果を割り当てる必要はないということについては正しいですが、それを逃した! –

関連する問題