使用Slice与Knockout的Mapping插件创建的数组

时间:2012-02-29 01:28:02

标签: javascript knockout.js knockout-mapping-plugin

我整天都在苦苦挣扎,我不确定自己错过了什么。我有一个使用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抓取数据并使用映射插件。我无法弄清楚我错过了什么。任何帮助将不胜感激。

2 个答案:

答案 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/

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