Knockout.js - ko.mapping.fromJS - 可见绑定未更新

Ben*_*rpe 7 jquery asp.net-mvc-4 asp.net-web-api knockout.js

我正在开发一个网站,每隔5秒更新页面上的值,它调用远程数据库并通过Get Json调用返回MVC模型,并调用

viewModel = ko.mapping.fromJS(model).

然后我使用另一个Get调用每隔5秒更新一次该视图模型,然后调用此映射调用

 viewModel = ko.mapping.fromJS(model, viewModel). 
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

Pau*_*tti 2

我发现您有时需要在更新视图模型时提供空映射:

ko.mapping.fromJS(model, {}, viewModel);
Run Code Online (Sandbox Code Playgroud)

如果失败,请输出 的值selections.IsVisible并确保其格式可以解析为 true 或 false。