2012-01-20 4 views
4

クライアント側でknockout.jsでページリストを作成しています。下のコードでページインデックスを出力しようとしています。人々がページを切り替えることができるように番号付きのクリック可能なリンク。knockout.jsでko.computedを反復処理するときにforeachのインデックスにアクセスするにはどうすればいいですか?

<ul data-bind="foreach:Paging"> 
<li> 
<a href="#" data-bind="click: $root.SetCurrentPage(), text: WHATTOWRITEHERE "></a> 
</li> 
</ul> 
私のviewmodelで

this.Paging = ko.computed(function() 
{ 
    return ko.utils.range(1, this.TotalPages); 
}); 

すべてが動作しますが、ちょうどoutputtungテキストを試してみました:テスト、それはページごとにテストを書き込みますが、私は数字をしたいです。だから、最も簡単な方法はもちろんforeachと+ 1の現在のインデックスにアクセスすることです。

私はこれをどのようにすることができますか?

+0

あなたは、「テキストを:これを」試してみましたか? – ColinE

+0

このエラーが表示される "メッセージ:ReferenceError:無効な代入左手;"バインディング値:テキスト:this – Kimpo

+0

現在のインデックスへのアクセス:http://stackoverflow.com/questions/6047713/bind-template-item-to-the-index-of-the-array-in-knockoutjs – Luffy

答えて

2

問題は計算されたkoである可能性があります。あなたはthisに縛られていません。だから、代わりに:

this.Paging = ko.computed(function() 
{ 
    return ko.utils.range(1, this.TotalPages); 
}); 

..してみてください...

this.Paging = ko.computed(function() 
{ 
    return ko.utils.range(1, this.TotalPages); 
}, this); 

あなたは、あなたがバインディングでthisを使用する場合、それはウィンドウオブジェクトを参照しますtext: this

+0

tyvm :)忘れてしまったこの問題を解決した他のいくつかの場所でko.computedに2番目のパラメータとしてこれを送ってください。 – Kimpo

2

のコリンの提案を試すことができます。あなたは、このような$dataを使用するべきである:

<a href="#" data-bind="click: $root.SetCurrentPage(), text: $data"></a> 

私は、このマークアップを使用して、それをテストし、期待どおりに働いた:

<!-- returns 12345678910 --> 
<div data-bind="foreach: ko.utils.range(1,10)"><span data-bind="text: $data"></span></div>