淘汰后js在ajax发布后更新viewmodel

时间:2018-07-12 21:07:30

标签: ajax knockout.js knockout-mapping-plugin

我正在使用敲除js和敲除映射插件。

我的问题是调用ajax发布后,我的视图(ui)没有更新。 只有重新加载页面后,数据才会更新。

<tbody data-bind="foreach: WorkData">
    <td data-bind="text: id"></td>
    <td data-bind="text: user_name"></td>
    <button class="btn btn-xs btn-success" data-bind="click: $parent.postTmpData" role="button">
        <span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
    </button>
</tbody>

<script>
    function ViewModel() {
        var self = this;
        var data = <?php echo json_encode($this->data); ?> ;
        self.WorkData = ko.mapping.fromJS(data);

        self.postTmpData = function(entry) {
            $.post("<?php echo Config::get('URL'); ?>/work/confirmWorkPost/", entry, function(returnedData) {
                ko.mapping.fromJS(returnedData, self);
            })
        }
    }
    ko.applyBindings(new ViewModel());
</script>

2 个答案:

答案 0 :(得分:0)

您要用returnedData替换WorkData吗?它们只有在相同的结构中才有可能。在这种情况下,请尝试以下操作:

$.post("<?php echo Config::get('URL'); ?>/work/confirmWorkPost/", entry, function(returnedData) {
    ko.mapping.fromJS({'WorkData': returnedData}, self);
})

答案 1 :(得分:0)

这是我的解决方案:

ko.mapping.fromJS(JSON.parse(returnedData), self.WorkData);