2012-02-29 7 views
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経由でデータを取得し、マッピングプラグインを使用しています。私は何が欠けているのか分からない。どんな助けでも大歓迎です。

+0

JSFiddleをデモンストレーションしてデモンストレーションすることはできますか? – madcapnmckay

答えて

4

あなたの問題は、itemsOnCurrentPage計算された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

+1

あなたは間違いなく 'itemsOnCurrentPage'を使うことができます。あなたのAJAXリクエストが返ってきたら、既存のobservableArrayを更新したいだけです。 –