2

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

4

2 回答 2

4

您的问题是计算出的itemsOnCurrentPageobservable 与您的原始 observableArray 绑定。当您这样做时viewModel.items = ko.mapping.fromJS(data),您将设置viewModel.items为等于一个新的 observableArray(itemsOnCurrentPage未绑定的)。

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

于 2012-02-29T02:00:16.057 回答
2

RP是正确的。

这是一个显示您在做什么的 JSFiddle:

http://jsfiddle.net/jearles/P99zy/

这是一个有效的更新:

http://jsfiddle.net/jearles/P99zy/2/

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

于 2012-02-29T02:38:49.143 回答