javascript - ajax请求周期自动刷新时如何使用knockout.js数据绑定(bind)?

标签 javascript jquery ajax knockout.js

在我的应用程序中,我定期每 5 秒调用一次 ajax 以从服务器获取新更新。

我来自服务器的 ajax 数据是 JSON 数组,如下所示: [ { “富”:“瓦尔克斯”, “酒吧”:“值(value)”

}, { “富”:“值”, “酒吧”:“瓦尔兹” } ]

我的 ajax 代码是:

(function update() {

    $.ajax({
        type : 'GET',
        url : url,
        data : {

        },
        dataType : "json",
        global : false,
        success : function(content, textStatus, jqXHR) {
        myViewModel = content;
        ko.applyBindings(myViewModel);

        },
        complete: function() {

         setTimeout(update, 5000);
          },

        error: function( xhr, textStatus ) {

            }
    });
    })();                       

我的 HTML 是:

<tbody data-bind="foreach: myViewModel">
                        <tr>
                            <td data-bind="text: foo"></td>
                            <td data-bind="text: bar"></td>
                        </tr>
                    </tbody>

但这不起作用,在第一次 ajax 调用后出现错误: 您不能对同一个元素多次应用绑定(bind)。

最佳答案

你很接近。您只需调用一次 applyBindings。相反,您应该做的是在您的 View 模型上设置一个 observable 属性。

以下是设置 View 模型的方式:

function ViewModel() {
    var self = this;

    self.data = ko.observableArray();
};

var viewModel = new ViewModel();

ko.applyBindings(viewModel);

然后当您有新数据时(例如在您的 ajax 调用中):

$.ajax({
    success : function(content, textStatus, jqXHR) {
        viewModel.data(content);
    }
});

注意:您可以通过几种不同的方式设置数据。如果你希望你的定时事件在 View 模型之外,那么你可以使用 View 模型实例(在我的示例中,viewModel)来访问属性并更新它们。如果需要,您可以将定时事件放置在您的 View 模型中,然后只需调用 self.data(content)(或类似的东西)。

关于javascript - ajax请求周期自动刷新时如何使用knockout.js数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20483599/

相关文章:

javascript - 使用 JQueryMobile 时延迟加载页面 2-3 秒

javascript - 如何以编程方式触发选择事件

javascript - jQuery Flot 图未加载(JSON 数据)

javascript - AJAX api 调用的 localStorage.setItem 在函数运行后才定义

jquery - 插入后如何让 jquery 将行为附加到元素

Javascript 表单验证不执行

javascript - 在 JavaScript 中将数组作为参数传递

javascript - 遍历表中的多个数组并组合成单个数组

jquery - 在ajax加载的内容中预加载图像

java - Spring @RequestParam 和 req.getParameter ("xx") 的工作方式不同吗?