簡體   English   中英

KnockoutJS - 更新數組時表不更新

[英]KnockoutJS - table not updating when array is updated

我在這里創建了一個問題的例子:

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

我的實際代碼與ASP.NET Web方法相關聯,因此示例代碼已經過調整,以指向公共Web服務進行演示。

基本上,我有一個我綁定的數組,但是在ajax調用之后,表沒有顯示更新的信息。 我不確定我缺少什么,我一開始認為我需要映射插件,所以我已經嘗試了但是我仍然沒有到達任何地方。

當我的數據發生變化時,我不打算應用綁定嗎?

[編輯]

以下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>

看看這個小提琴: http//jsfiddle.net/Gm7zH/1/

首先,由於跨域請求,我使用假的ajax數據。 這是我從你的服務器獲得的數據。 並使用setTimeout來模擬異步請求。

然后你做了一些錯誤:

您嘗試映射到數組的屬性地址,該地址不存在。 其次,結果的地址只是一個對象,所以我將它包裝在一個數組中以使其工作。

然后你嘗試映射到現有的observableArray,但是提供數組作為第二個參數,第二個參數是映射選項,第三個參數是正確的位置。 我在示例中傳遞null作為映射選項。

最后,為了使表可見,你說items.length> 0.你想要的是items()。length> 0這是底層數組的長度。

你的數組是self.items ,但你的ajax success調用正在更新self.items.address ,我猜這是undefined 因此,映射插件正在創建一個與原始模型無關的模型。

(你沒有顯示data.d樣子,但我假設它是一個數組。)

當我的數據發生變化時,我不打算應用綁定嗎?

正確。 你這樣做一次,然后更新observable應該(一切都很好)更新DOM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM