我用html tbody data-bind = "foreach: contacts"
和Knockout视图模型
var viewModel = function () {
$this = this;
$this.contacts = ko.observableArray();
$this.nextPage = function () {
$.ajax({
url: "/api/AddressBook",
data: { pagesize: pageSize, currentpage: CPage },
type: "GET"
}).done(function (data) {
var myKoObservableArray = $this.contacts;
myKoObservableArray.push(null);
myKoObservableArray.push(data);
alert(data[0].Name);
});
}
$(document).ready(function () {
$.ajax({
url: "/api/AddressBook",
data: { pagesize: 10,currentpage: 0 },
type: "GET"
}).done(function (data) {
var vm = new viewModel();
vm.contacts(data);
ko.applyBindings(vm);
});
});
第一次加载页面时,表格是从$(document).ready的ajax调用中填充的 . 当我从UI调用nextPage时,我进行ajax调用并且alert(data [0] .Name)显示返回数据数组中的第一个元素 . 是每次从服务器返回的不同集合 . 问题是,在第二次(和下一次)ajax调用中更改“contacts”可观察数组后,UI中的表没有更改 .
3 回答
你为什么做这个?
这会在结尾添加一个元素
contacts
,即对您收到的整个数组的单个引用 .听起来你想用你从ajax调用中获得的数组替换
contacts
的内容 . 如果是这样,只需用这两个语句替换如果您希望将新项目附加到现有项目,而不是使用
是的,您可以为您的数组调用valueHasMutated函数:
如果第一次没有帮助你可以做'脏'刷新:
这是工作小提琴:http://jsfiddle.net/vyshniakov/FuEy6/2/
问题是脚本文件包含两次 - 在页眉和页面底部 . 这可能破坏了约束力 .