了解ko.mapping.fromJSON

时间:2013-03-23 18:53:00

标签: knockout.js knockout-mapping-plugin

我有一个ASP.NET MVC应用程序,它使用WebAPI作为数据,并在前端使用KnockOutJS。在大多数情况下,事情工作得很好,但是我开始意识到在更新值时,这些值不会反映在绑定元素中。

原因是因为数据是作为JSON从服务器传递的,并且是在普通的JSON对象中转换的。换句话说,没有属性被映射为“observables”,因此当我更改对象的值时,不会更新任何内容。

我读到了一个名为“mapping”的KnockOutJS插件,我已经添加了,但是我无法找到正确的语法来使其工作。我希望其他人已经处理过此事并提出一些建议。这是我目前的代码:

<script type="text/javascript">
    function BlogViewModel() {
        var self = this;
        self.blogs = ko.observableArray();
        var baseUri = '@ViewBag.ApiUrl';

        //$.getJSON(baseUri, self.blogs);
        $.getJSON(baseUri, {},
                function (data) {
                    ko.mapping.fromJSON(data, self.blogs);
                });
    }

    $(document).ready(function () {
        ko.applyBindings(new BlogViewModel());
    });

    });
</script>

注释掉的部分($ .getJSON(baseUri,self.blogs);)就是那里的,并且在获取和显示数据方面“有效”。

下面的代码是我尝试读取数据并将映射应用于它。它根本不起作用。换句话说,我没有在页面上看到任何数据。

我确定我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:2)

将您的JSON数据映射到ko viewmodel,如下所示:

ko.mapping.fromJSON(data, {}, self.blogs);