Knockout Mapping尝试不与JSON响应进行映射

时间:2013-03-13 21:31:10

标签: asp.net-mvc knockout.js knockout-mapping-plugin

我是淘汰赛的新手,似乎无法让简单的映射工作。我在MVC4 C#。

我的观点如下:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
    ViewBag.Title = "Index";
}

<h2>Simple Mapping Example</h2>

The time on the server is: <span data-bind="text: ServerTime"></span>
and <span data-bind="text: NumberOfUsersConnected"></span> user(s) are connected.

@section Scripts
{
    <script type="text/javascript">

        function ViewModel() {
            var self = this;

            self.ServerTime = ko.observable();
            self.NumberOfUsersConnected = ko.observable();
        }

        var vm = new ViewModel();
        ko.applyBindings(vm);

        $.getJSON('/Mapping/GetServerInfo', function(data) {
            ko.mapping.fromJSON(data, {}, vm);
        });

    </script>
}

从控制器调用'Mapping / GetServerInfo'返回的示例JSON是:

{"ServerTime":"2013-03-13T14:24:10.5675104-07:00","NumberOfUsersConnected":5}

对于数据绑定,我尝试过文本和值,两者都不会导致绑定和显示任何数据。

我错过了一些非常明显的东西吗?

根据评论中的问题,这就是我的布局中的内容。

<script type="text/javascript" src="~/Scripts/knockout-2.2.1.js"></script>
<script type="text/javascript" src="~/Scripts/knockout.mapping-latest.js"></script>

由于

1 个答案:

答案 0 :(得分:3)

来自$.getJSON documentation

  

成功回调传递返回的数据,通常是a   JavaScript 对象或数组,由JSON结构定义并解析   使用$ .parseJSON()方法。

所以你的data变量持有一个已经解析过的对象,所以你需要使用ko.mapping.fromJS方法:

$.getJSON('/Mapping/GetServerInfo', function(data) {
   ko.mapping.fromJS(data, {}, vm);
});