2

KnockoutJS foreach内の関数からデータをバインドするにはどうすればよいですか?

たとえば、次のコードがあります。

 <div data-bind="foreach: timeEntries">
     <a href="#page1" data-icon="refresh" data-theme="c">
         <span data-bind="text: getActivityName(ActivityId)"></span>
     </a>

モデルコンテキストに存在する関数getActivityNameを呼び出し、foreachが繰り返すtimeEntryのプロパティであるActivityIdを渡します。

これをバインドするだけ

data-bind="text: ActivityId"

各行のアクティビティIDは正しく表示されますが、ルックアップを実行して辞書から名前を取得する必要があります。上記のコードは、コンテキストではなく現在のアイテムでgetactivitynameを呼び出す可能性が高いと思いますが、どうすれば修正できますか?

4

1 に答える 1

6

foreach バインディングは、新しい bindingcontext を作成します (これにより、ループ内の項目のプロパティに直接バインドできます。ループの代わりにビューモデルからプロパティを参照する場合は、$root または $parent バインディングを使用できます。

<span data-bind="text: $root.getActivityName(ActivityId)"></span>

getActivityName 関数は、検索を行うことができます。

別のオプションは、 foreach オブザーバブルで反復されるオブジェクトを作成し、ルックアップを行う計算されたオブザーバブルを作成することです。

于 2012-08-17T08:11:36.923 に答える