2012-02-29 25 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

相關問題