問題タブ [viewmodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
design-patterns - 2 つのモデル ビューの設計とモデル間の通信
2 つの異なる部分を持つダイアログ ボックスがあります。各パーツはモデルビューデザインを採用。
ただし、モデルが更新されると、2 番目のモデルも更新する必要があります。2 つのモデル間の通信 (更新通知) のためのベスト プラクティスまたは設計パターンが存在するかどうか疑問に思っています。
2 つのビューと 1 つのモデルのみを持つことは実際には不可能です。
御時間ありがとうございます
c# - カスタム ViewModel クラス - プレフィックスが指定されていない限り、すべてのフィールドが無効とマークされているわけではありません
私は、2 つのフィールドと 1 つの linq2sql エンティティを持つカスタム ビューモデルを持っています。すべてのフィールドには、検証属性が添付されています。すべてのフィールドが無効な場合でも、linq2sql クラスのフィールドのみがエラーとして視覚的に示され、viewmodel のフィールドは正常に表示されます。ただし、すべての無効なフィールドに対してエラー メッセージが表示されます。
私のカスタム ViewModel は次のようになります。
Book クラスは、検証のためにメタデータ型属性が付加された linq2sql エンティティです。
リポジトリには、2 つのオーバーロードを持つ AddBook メソッドがあります。1 つはビューモデルを取り、もう 1 つは Book タイプを取ります。
コントローラーの Create アクションは次のようになります。
クライアント側の検証ルールを生成するために xVal を使用しています。私の作成ビューは次のようになります。
クライアント側の検証は正常に機能します..しかし、JavaScriptをオフにしてからポストバックすると、すべてのフィールドに対してフォームエラーメッセージが表示されますが、Field1とField2は無効としてマークされません..フィールドにCSSクラスが追加されておらず、 span タグは、視覚的なエラー表示のために生成されます。
スクリーンショット http://img22.imageshack.us/img22/324/26677634.jpg
しかし、ViewModel フィールドに何かを貼り付けると
それに応じてビューを変更すると、すべてが正常に機能します。
ここで何が間違っていますか?
この投稿をとても長くして申し訳ありません..
asp.net-mvc - MVC の POST アクションに ViewModel をエレガントに使用する
現在、ドメイン オブジェクトをビューに渡し、POST からそれらに直接バインドしています。誰もがこれは悪いと言うので、ViewModel の概念を追加しようとしています。
ただし、これを非常にエレガントに行う方法を見つけることができません。非常に面倒なコントローラーアクションで終わらないための他の人の解決策を知りたいです。
たとえば、「人を追加」機能の典型的なプロセスは次のようになります。
- 空の Person ビューモデルを表すビューの GET リクエストを作成する
- ポストバック (イン) 有効なデータ
- コントローラーは、投稿されたデータを人物ビューモデルにバインドします
- バインディングが失敗した場合、(1) と同じアクションを実行する必要がありますが、空のオブジェクトではなく、いくつかのデータを使用してエラーを発生させます。
- バインディングが成功した場合は、プロパティを VM から実際のモデルにマップする必要があります
- モデルを検証する
- 検証に合格した場合: 個人を保存し、コミットし、ユーザーの詳細をディスプレイ VM にマップして、ビューに返します。
- 検証が失敗した場合は、(1) と同じアクションを実行しますが、いくつかのデータとエラーがあります
これらすべてをコントローラー アクションで実行する (GET を無視する) ことは、確かに SRP や DRY ではありません。
このプロセスを分割して、SRP に準拠し、クリーンでモジュール化され、何よりもテスト可能になる方法を考えようとしています。
これに対する人々の解決策は何ですか?
カスタムコントローラーアクションインボーカーを使用して、懸念を個々のメソッド、スマートモデルバインダー、および単純なブルートフォースに分離することを試してきましたが、満足のいく解決策にまだ出会っていません。
PSそれは非常に複雑になるので、なぜ私が気にする必要があるのか を納得させてください
mvvm - Josh Smith の MVVM デモ アプリ: コマンドを MainWindowViewModel のコマンド リストに追加する
Josh Smith の有名な MVVM のデモ アプリについて質問があります。
WPFを学ぶために、その周りに「実際の」アプリケーションを構築してみます。
彼は、2 つのコマンド (新規作成とすべての顧客の表示) を含む MainWindowViewModel にこの CommandsList を作成します。このリストは読み取り専用です (なぜですか? 特定の理由がありますか?)。現在選択されているワークスペースに応じて、いくつかのコマンドを追加および削除するとよいと思います。フォーカスがあるときに顧客を編集または削除するなど。
どうすればこれを達成できますか?! 通常のリストにしてコマンドを追加することはできますか? または、Commands-View を MainWindow ではなく、選択したワークスペースのコマンド リストにバインドしますか? どのように?他の方法はありますか?あなたのアイデアを共有してください!
どうもありがとうございました!
wpf - WPF: 特定のコントロール/ビュー/ビューモデルでの LostFocus イベント
私は MVVM パターンを使用して WPF で作業していますが、WPF と MVVM の両方のニュアンスに頭を悩ませているため、一般的にはうまく機能しているようです。しかし、私は現在、特定の問題で立ち往生しています。私の実際のアプリケーションはかなり複雑なので、単純化するために、パターンに関する Josh Smith のほぼ定義的な記事を取り上げ、その中でアプリケーションを使用してみましょう。
図 2 を考えてみましょう。ユーザーが名前と姓のフィールドに何かを入力したとします。次に、ユーザーは、別の顧客タブをクリックするか、同じアプリケーション内のまったく異なるビューモデルをクリックして、ワークスペース (ビューモデル) から完全に離れます。この場合、私が望んでいるのは、アプリケーションが「変更を保存しますか? はい/いいえ/キャンセル」と尋ね、適切に応答することです。これは...課題を提示しました。
ユーザーが最初のパスで PreviewLostKeyboardFocus が必要であることを「キャンセル」できるようにしたいので (Handled=true を設定してフォーカスシフトをキャンセルできるため)。ただし、一部のユーザー アクション (別のワークスペースのタブをクリックするなど) では、キーボード フォーカスが移動しません。LostFocus はその点で私をよりよくカバーしますが、それはフォーカスが既に失われた後でのみ (もちろん、元に戻すことはできますか?)、イベントがビュー自体からのものであったかどうかを判断する際に問題があります (つまり、フォーカスを離れています)。ビュー全体) または含まれているオブジェクトから単純にバブルアップした場合。
そして、これらすべての全体像-これはビューの問題のようですが、それは魔法のビューモデルではなくビューでコードを書くことを意味します. これは、私がこれを正しく見ていないと私に思わせます。
ですから、このすべてを明確にする大きな概念的なa-haが欠けていることを願っています. ヘルプ?
asp.net - ASP.NETMVCViewModelパターン
編集:ViewModelsを使用してビューからデータを入力および読み取るために、ValueInjecterと呼ばれるものを大幅に改善しました。http://valueinjecter.codeplex.com/
http://prodinner.codeplex.com(ASP.net MVCサンプルアプリケーション )で使用されます
あなたはprodinnerでViewModelsを使用する最良の方法を見ることができます
ViewModelを使用してマッピングロジックを格納することは、繰り返しとSRP違反があったため、あまり良い考えではありませんでしたが、ValueInjecterを使用すると、クリーンなViewModelとドライマッピングコードが得られます。
これは古いものです。使用しないでください
。asp.netmvcで編集するためのViewModelパターンを作成しました。このパターンは、エンティティを編集するためのフォームを作成する必要があり、フォームにドロップを配置する必要がある場合に便利です。ユーザーがいくつかの値を選択するためのダウン
performance - Linq to SQL: プロジェクション、ViewModel、翻訳不可能なクエリ
私のアプリケーションは大量のデータを処理する必要があり、通常の選択サイズは約 10000 行です。パフォーマンスを向上させるために、必要なデータのみを選択することをお勧めします。
計算や意味のあるビジネスを行う必要がある場合、モデルを正しくインスタンス化するためにすべてのデータを選択して、その機能に頼ることができます。
データのみを (ほとんどの場合テーブルで) 表示する場合、これは私が望むものではありません。取得するデータの量を絶対最小値に制限したいと考えています。
これまでのところ、リポジトリからデータを取得するために次のアプローチを使用してきました (以下に示すのは、リポジトリ内ですべての魔法を実行する方法です。
そうすれば、リポジトリを呼び出すメソッドに匿名型の型定義があり、そこで型を透過的に操作できます。
すべてのコントローラーは、ビューに渡すデータを正確に定義できます。ビューでグリッド コントロールを処理することなく、列の順序などに直接影響を与えることができるため、非常に効率的です。セレクターに基づいてそれを把握するため、DataContext に LoadOptions は必要ありません。
問題は、リポジトリに渡されるセレクターを制御できないことです。翻訳できないメソッド呼び出しなどが含まれている場合もあります。
私の質問は:
- これまで、型の爆発を恐れて ViewModel を作成することを避けてきました。それらを実装する最良の方法は何ですか? 投影を行うセレクターを利用可能にする必要がありますか?
- クエリが例外なく実行される場合を除き、何もチェックしない単体テストを作成する必要がありますか?
jquery - ASP.NET MVC ViewModel での JQuery 日付ピッカーの使用
asp.bet mvc ビューで JQuery 日付ピッカー (カレンダー) を使用しようとしています。ViewModel を使用しなければならないまで、すべてが正常に機能していまし<input name="viewmodel.Meeting.Date"...
た。モデル バインダーを使用する代わりに、ハードコードされたオブジェクト グラフ (つまり ) を使用することを好んだため、機能しないスクリプトで立ち往生しています。明らかに JQuery スクリプトは機能しません。 'スクリプトでドットを許可しない - $(#viewmodel.Meeting.Date)
...
何か案は?
wpf - ViewModelのWPF MVVM単体テスト?
特に単体テストに MVVM を使用する利点について読み続けています。そのため、ViewModel の単体テストを作成する必要があります。誰にもこれの例はありますか?VS2008 を使用して単体テストを生成し、重要と思われるテストを選択する必要がありますか?
c# - Getを使用してビューから別のビューにASP.Net MVCでViewModelを渡す
私は、私が周りに持っている他のいくつかのセッションタイプのものと一緒に作業しているエンティティリストを含む、強く型付けされた ViewModel を持つリストビューを持っています。
リスト内の項目 (Html.ActionLink) をクリックして詳細ビューに移動すると、エンティティ ID を簡単に渡すことができます。しかし、ViewModel の残りの部分も View から渡したいと思います。
さまざまな QueryString パラメーターを使用して ActionLink を構築すると、カスタム ModelBinder がそれらを取得して、ViewModel オブジェクトを再度ハイドレートできます。しかし、私はこれが好きではありません。
同じページなどに POST されたときにカスタム ViewModel をリハイドレートすることはできますが、ModelBinder を使用せずに別のビューへの GET を使用して、ViewModel オブジェクトを単に対象の Action メソッドのパラメータ?