2011-12-28 38 views
4

私はviewmodelのhtml要素への参照を持つべきではないと思います。ですから、私は$( 'id')対話()や警告( 'メッセージ')やwindow.open()をしてはいけません。 どうすればいいですか?knockout.jsを使用してアラート/ポップアップ/ウィンドウを表示する方法

+2

カスタムバインディングを使用してビューモデルからjQuery UIダイアログを制御するサンプルについては、この回答を見てください。 http://stackoverflow.com/questions/8611327/integrating-jquery-ui-dialog-with-knockoutjs/8611892#8611892 observableをtrueに設定すると、ダイアログが開き、falseに設定するとダイアログが閉じます。 –

+0

これは完璧です。ありがとう。 –

答えて

8

カスタムバインディングを使用してビューモデルからjQuery UIダイアログを制御するサンプルについては、この回答を見てください。

integrating jquery ui dialog with knockoutjs

trueに観測可能な設定、それを閉じfalseに設定すると、ダイアログが開きます。

+0

あなたは2 upvotesを受け取り、:)既にupvoted元の答え。 –

1

実際には、ダイアログを使用しても何の努力もありません。 Knockoutにバインドさせるだけで、データはダイアログ要素に表示されます。私のアプリケーションでは、ダイアログが開いているかどうかは影響しません。ノックアウトは値を更新します。

ただし、論理的なセクションで私のバインディングを行います。ですから、私はko.applybindingsを2つの呼び出しでページとダイアログの本体に個別に適用します。

アラートに関しては、表示するテキストを渡す必要があります。だからここでノックアウトを使うには、ノックアウトで隠し要素を更新させる必要があります。次に、アラートに表示される値を取得します。

window.openの場合、あなたの懸念事項は不明です。私が理解しているように、それは新しいページに行くのと同じです。そのページのロジックがデータを埋め込むことになります。

+0

はい私はノックアウトが隠しダイアログの値を入力することを知っています。しかし、そのダイアログをどのように表示するのですか? –

+0

私はviewmodelにロジックだけを含み、UIへの参照は含まないようにしたいと思います。 C#で書かれた単体テストのビジネスロジッククラスをテストできるように、私はUIとは独立してテストすることができます。私のクラスが窓を開けたり、私が思うように警告を出すかどうかはテストできません。 –

関連する問題