我整天都在苦苦挣扎,我不确定自己错过了什么。我有一个使用Knockout创建的工作网格。我正在尝试将网格转换为使用映射插件,它会破坏我的分页。如何使用切片功能与映射插件返回我的数组的子集?我错过了什么?
var grid = {};
grid.Model = function (jsondata) {
var viewModel = {
items: ko.observableArray()
};
$.getJSON('/api/test/items', function (data) {
viewModel.items= ko.mapping.fromJS(data);
ko.applyBindings(viewModel)
});
viewModel.itemsOnCurrentPage = ko.computed(function () {
return viewModel.items.slice(1, 10);
}, viewModel);
};
我正在尝试绑定到itemsOnCurrentPage(foreach:itemsonCurrentPage)。直接绑定到项目工作正常。当我在客户端手动构建我的阵列时,这很有效。现在我通过jQuery抓取数据并使用映射插件。我无法弄清楚我错过了什么。任何帮助将不胜感激。
答案 0 :(得分:4)
您的问题是itemsOnCurrentPage
计算的observable与原始的observableArray绑定。当您执行viewModel.items = ko.mapping.fromJS(data)
时,您将viewModel.items
设置为等于新的observableArray(itemsOnCurrentPage
未绑定的那个)。
您可以执行:ko.mapping.fromJS(data, {}, viewModel.items)
更新现有的observableArray。
答案 1 :(得分:2)
RP是正确的。
这是一个JSFiddle,显示你在做什么:
http://jsfiddle.net/jearles/P99zy/
这是一个有效的更新:
http://jsfiddle.net/jearles/P99zy/2/
唯一的区别是我加载表项的方式。