ノックアウトjsのforeachバインディングを使用して、挿入される要素に入口効果を指定しようとしています。非常に簡単なセットアップ:
myViewModel.myObservableArray.push({enter:function() { ... });
そしてマークアップで:
foreach:{data:myObservableArray, afterRender:enter}
それはうまくいくはずです...そうですか?しかし、アイテムの入力機能が見つかりません。私が見つけたのは機能します:
myViewModel.enter = function(something, item) { item.enter(); };
foreach:{data:myObservableArray, afterRender:$root.enter}
Enter 関数をルート ビュー モデルに追加し、afterRender
$root.enter にバインドします。次に、Enter にアイテムが 2 番目のパラメーターとして渡されるため、アイテムの enter 関数を呼び出すことができますが、ハックのように感じます。
ここで何が起こっているのか誰か説明できますか?
ありがとう。
編集:
明確にするために、フィドルを作成しました。
これが行うことは非常に単純で、アニメーション化されたトランジションの例で詳しく説明されています。foreach バインディングを使用して挿入された各 dom 要素に対して、ルート ビュー モデルで関数を実行しています。
問題は、アイテム固有の afterRender、afterAdd、または beforeRemove 関数が必要な場合はどうすればよいかということです。これは有用であることがわかりました。特に、テンプレート バインディングを使用してテンプレートを動的に選択する場合 (注 4 )。これを行うクリーンな方法はありますか?現在enter
、ビューモデルのルートenter
に、アイテムの関数を呼び出すだけの関数がありますが、上で述べたように、これはハックのように感じます。