[英]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.