2012-03-14 6 views
0

は、私はちょうど(ループの各反復でいくつかの余分なJavaScriptコードを実行したいと考えているあなたは、単純なノックアウトループは、などをループ

<!-- ko foreach: data --> 
    <div ... show something </div> 
<!-- /ko --> 

を持って言うことができますこのコードをモデルではなくビューに配置したい)。スクリプトタグを使用するのが適切かどうか分からないが、スクリプトタグ内に既に含まれているように、コードがノックアウトテンプレートの内側にあったとは思えない。

ノックアウトビューで通常のJavaScriptコードを実行することはできましたが、他にもいくつかのケースがあります。私はしばしばやりたいことではありませんが、まれに、他のものを変更するのではなく、通常のJSを使用する方が簡単かもしれません。

+0

これをさらに追加すると、大きな配列をループしてリストをユーザーに提示する特定の状況が1つあります。このループの特定のポイントで、リストの残りの行を別々にレンダリングします。例えば、私のモデルの中で、行が一方向にレンダリングすべきかどうかを決定する関数を持つことができます。しかし、この比較演算は単純ではなく、2つの文字列を操作して比較する必要があります。 – Sam

+0

私が考えていたもう1つの選択肢は、ループ内にフラグを使用することでした。所望の条件が満たされると、フラグがセットされ、残りの行が異なるレンダリングを行う。 (私がモデルで比較を行った場合に必要となるように、文字列が別の文字列の前に来るかどうかを判断する文字列を操作するのではなく、正確な文字列の一致を探すことができるので、フラグをモデルに格納するのではなく、フラグをループ内にローカルに格納することをお勧めします。なぜノックアウトループでJSを実行したいのですか? – Sam

+0

これ以外にも、私はノックアウトビューの中で通常のJavaScriptを実行するパーティクルメソッドを知りたいと思っています。他の状況でまれにしか必要としないかもしれません。 – Sam

答えて

0

あなたはそうしてはいけません。

理由は、ビジネスロジックとデータを混在させてしまうためです。あなたは

<!-- ko foreach: { data: data, afterAdd: myhandler } --> 
    <div ... show something </div> 
<!-- /ko --> 

afterAddハンドラを使用してforeachの中に関数を実行することができます

+0

こんにちはDhaivat、ありがとうございます。私はあなたが言っていることを理解しています、それは私が定期的にやろうとするものではありません。しかし、私の現在の状況を詳しく調べることなく、ノックアウト・ループ内で正規のJSを使用する方が簡単だと感じています。 – Sam

+0

また、私はデバッグと実験目的のためにこれをやりたいかもしれない他のケースもあります。 – Sam

+0

しかし、ノックアウトはあなたがそれをやりたいとは思いません。それで彼らはあなたをさせません!このようなものをデバッグするには、いつもより良い方法があります。 ChromeのデベロッパーツールやFirebugなどのものをチェックしてください。 –

0

は、この情報がお役に立てば幸いです。

+0

役に立つチップをありがとう、今すぐ試してみよう – Sam

+0

addAfterを使うのは良いことだが、私が気にしていたことに100%適していない。ループで後で検査されるフラグを初期化したかったのです。フラグが初期化されていないループの最初の反復で問題が発生しました。 この非常に汚れたハックを使用しました <! - ko if:function {){myFlag = false; }() - > 私はそれを自分で好きではありません。 これを行う簡単な方法はありますか? "インライン" javascriptを可能にするカスタムバインディングを書く価値があるでしょうか?たぶん私は出発点を得るでしょう。 – Sam

+0

@Sam - あなたが達成したいことを実証しているフィドルを投稿すれば、私たちはもっと簡単な方法を見つけることができると確信しています。私はこれまでのようなインラインjsを必要としたことはありません。 – madcapnmckay

関連する問題