2013-07-08 2 views
7

Я работаю над сайтом, который каждые 5 секунд обновляет значения на странице, он обращается к удаленной базе данных и возвращает модель MVC через вызов Get Json, и звонитеKnockout.js - ko.mapping.fromJS - Visible Binding не обновляется

viewModel = ko.mapping.fromJS(model).

Я то обновление этой точки зрения модели каждые 5 секунд с помощью другого Получить звонок и это отображение вызов затем

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

привязки правильны моими HTML элементов, как оригинальная модель, которая извлекается из базы данных отображается, но тогда, когда свойство IsVisible на модели ничего не происходит, т.е. строка таблицы должна быть установлена ​​в невидимую, а другая должна быть видимой.

При каждом обновлении модель должна отличаться, при этом строки должны быть видимыми или невидимыми вместе с обновлением текста другого диапазона, эта часть работает, а обновления отображаются на странице, а видимость не меняется.

HTML-приложение видимой невидимой проблемы с Javascript вызова для обновления.

Все переменные из Модели правильно названы Я не могу опубликовать модель для публики.

<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

Я считаю, что иногда необходимо обеспечить пустое отображение при обновлении ViewModel:

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

В противном случае, выводит значение selections.IsVisible и убедитесь, что он находится в таком формате, который может решить к истинному или ложному.

+0

«пустое картографирование» работало для меня, остается вопрос: почему или когда? – Stefan

+0

просто запустите ko.mapping.fromJS (модель, {}, viewModel) без установки видаModel, равного ему. В этом случае он не только избыточен, но и передает viewModel в качестве третьего параметра. Пусто {} просто означает использование пустого пользовательского сопоставления. – beauXjames

+0

Извините, я имел в виду, что не понял, почему мне приходится иногда пропускать пустое картографирование, чтобы сделать эту работу. Вы правы в том, что вам не нужно назначать результат для просмотра модели, хотя и пропустили это! –

Смежные вопросы