2012-02-29 60 views
2

我一直在努力与这一整天,我不知道我错过了什么。我有一个使用Knockout创建的工作网格。我试图将网格转换为使用映射插件,并打破了我的分页。我如何使用映射插件的切片函数返回我的数组的子集?我错过了什么?使用Slice创建数组由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

你可以连接一个JSFiddle来演示。 – madcapnmckay 2012-02-29 01:55:52

回答

4

您的问题是itemsOnCurrentPage computed observable与您的原始observableArray绑定。当你做viewModel.items = ko.mapping.fromJS(data)时,你正在设置viewModel.items等于一个新的observableArray(itemsOnCurrentPage未绑定的)。

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

+0

谢谢。这就说得通了。我明白我做错了什么。现在我需要找出一个解决方案。我不想更新viewModel.items。我只想显示一个viewModel.items的'切片'。 – Mark 2012-02-29 02:31:05

+1

你绝对可以使用'itemsOnCurrentPage'。您只需在AJAX请求返回时更新现有的observableArray。 – 2012-02-29 03:36:10