javascript - KnockoutJS - 更新数组时表不更新

标签 javascript jquery knockout-2.0

我在这里创建了一个问题示例:

http://jsfiddle.net/JustinN/qWeLT/1/

我的实际代码已连接到 ASP.NET Web 方法,因此示例代码已调整为指向公共(public) Web 服务进行演示。

基本上,我有一个绑定(bind)到的数组,但是在 ajax 调用之后,该表不显示更新的信息。我不确定我错过了什么,我一开始以为我需要映射插件,所以我尝试过,但仍然一无所获。

我肯定不打算在每次数据更改时都应用Bindings 吗?

[编辑]

下面的 JavaScript:

var ViewModel = function () {
var self = this;
self.items = ko.observableArray([]);
self.refresh = function () {
    $.ajax({
        type: "POST",
        url: "http://api.wipmania.com/json",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            ko.mapping.fromJS(data.d, self.items.address);
        }
    });
};
}

var viewModel = new ViewModel();
$(function () {
ko.applyBindings(viewModel);
viewModel.refresh();
});

下面的 HTML:

<table data-bind="visible:items.length > 0">
<thead>
    <tr>
        <th>Country</th>
        <th>Code</th>
    </tr>
</thead>
<tbody data-bind="foreach: items">
    <tr>
        <td data-bind="text:country"></td>
        <td data-bind="text:country_code"></td>
    </tr>
</tbody>
</table>

最佳答案

看看这个 fiddle :http://jsfiddle.net/Gm7zH/1/

首先,由于跨域请求,我使用了假的ajax数据。这是我从你们服务器得到的数据。并使用setTimeout来模拟异步请求。

然后你犯了一些错误:

您尝试映射到数组的属性地址,但该地址不存在。其次,结果的地址只是一个对象,因此我将其包装在一个数组中以使其正常工作。

然后,您尝试映射到现有的 observableArray,但提供该数组作为第二个参数,第二个参数是映射选项,第三个参数是正确的位置。我在示例中将 null 作为映射选项传递。

最后,为了使表格可见,你可以说 items.length > 0。你想要的是 items().length > 0,这是底层数组的长度。

关于javascript - KnockoutJS - 更新数组时表不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9922259/

相关文章:

javascript - 从ajax调用结果更新qtip内容

javascript - 无法从类内调用函数 - 函数无法识别

php - 如何创建带有水印的jquery文本框?

javascript - react 下拉/选择不更新状态

javascript - 使用 selected-js 选择多个选项

php - 更改表单选择时的样式表 onChange ="change()"

javascript - 当我运行 index.html 时 android 没有检测到我的 .css 和 .js 文件怎么办?

javascript - knockout 绑定(bind)自定义组件,使其不与中心 View 模型冲突

jquery - 我什么时候应该将事件绑定(bind)到 Knockout 绑定(bind)生成的元素?

internet-explorer - IE 的 foreach 更快