Javascript 使用由Knockout';s映射插件

Javascript 使用由Knockout';s映射插件,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我一整天都在为这件事挣扎,我不确定我错过了什么。我有一个使用Knockout创建的工作网格。我试图将网格转换为使用映射插件,但它破坏了我的分页。如何使用带有映射插件的slice函数返回数组的子集?我错过了什么 var grid = {}; grid.Model = function (jsondata) { var viewModel = { items: ko.observableArray() }; $.getJSON('/api/test/items', function (d

我一整天都在为这件事挣扎,我不确定我错过了什么。我有一个使用Knockout创建的工作网格。我试图将网格转换为使用映射插件,但它破坏了我的分页。如何使用带有映射插件的slice函数返回数组的子集?我错过了什么

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获取数据并使用映射插件。我不知道我错过了什么。任何帮助都将不胜感激。

您的问题是,
项当前页面
计算可观测值与原始可观测值绑定。当您执行
viewModel.items=ko.mapping.fromJS(数据)
时,您将
viewModel.items
设置为等于一个新的observableArray(一个
itemsOnCurrentPage
未绑定的视图)

您可以改为执行:
ko.mapping.fromJS(数据,{},viewModel.items)
来更新现有的observableArray。

RP是正确的

下面是一个JSFIDLE,它显示了您正在做什么:

以下是一个有效的更新:


唯一的区别是我加载表项的方式。

您能用JSFIDLE进行演示吗。谢谢。这是有道理的。我明白我做错了什么。现在我需要想出一个解决办法。我不想更新viewModel.items。我只想显示viewModel.items的一个“片段”。您肯定仍然可以使用
itemsOnCurrentPage
。您只需要在AJAX请求返回时更新现有的ObservalArray。