0

ASP.NET MVC、KnockoutJSを使用しており、私はRequireJSを使用しています。

2つのノックアウトビューモデルを保持するオブジェクトを返しているというビューがあります。これを簡単にするために、親ビューはプロジェクトのリストです。適切なボタンをクリックして、新しい製品を作成したり、リストの製品を編集したりすることができます。どちらのボタンも、コントローラーから返されたPartialViewを取得することで入力されるjQueryダイアログを初期化します。

部分ビューが取得されたときに、ノックアウトビューモデル(元の返されたRequireJSオブジェクトのプロパティ)をその部分ビューにバインドします。新しい製品を作成し、KOビューモデルを取得してコントローラーアクションに保存することに問題はありません。

問題

問題は、既存の製品をPartialViewにロードしようとしたときに発生します。KOviewModelに初期値を入力できるようにする必要があります。考えられる解決策は、MVCビューモデルをコントローラーから既存のRequireJSオブジェクトに渡すことができれば、既存のプロパティ値を使用してKOビューモデルを初期化できることです。ただし、partialviewビューの製品リストビューで返された既存のjavascriptオブジェクトにアクセスする方法がわかりません。

渡された部分ビューでMVCモデルを取得できる唯一の間違った方法は、部分ビューでRequire JSを接続し、オブジェクトの新しいインスタンスを返してMVCモデルを渡す場合ですが、それは現在のjQueryダイアログのコールバックは元のオブジェクトに戻ります。

例:

親製品リストビュー

      ......bunch of html
     </li>
   </ul>
 </div>

 @{
   <script type="text/javascript">
      require(['jquery', 'items/adminItemsList', 'jquery-validate-unobtrusive' ],    function ($, viewModel) {
        $(function () {
             viewModel.initialize({
              addUrl: '@Url.Action("Add")',
              listUrl: '@Url.Action("List")',
              editUrl: '@Url.Action("Edit")',
              deleteUrl: '@Url.Action("Delete")'
          });
      });
  });

}

jQueryダイアログPartialView

      ....bunch of Html
   </div>
  </div>

 <script type="text/javascript">
    viewModel.Model(@Html.Json(Model))   //I need to be able to do something like this
 </script>

Jsonメソッドは単なるHtmlHelper拡張機能です。

返されたRequireJSオブジェクトにアクセスできるように設定するにはどうすればよいですか、またはこれを設計するためのより良い方法は何ですか。

私が持っている必要があるもの:

  1. 製品リストビューがあります
  2. 製品の作成/編集のビュー
  3. 製品リストビューのJavaScriptは、製品ビューの作成/編集を生成するjQueryダイアログを所有しているため、コールバック関数(onSuccessfulSubmit ...)を壊さないようにする必要があります。

考え?

4

1 に答える 1

0

私がやったことは、ViewModelsを分割することです(実際には2つの異なるビューがあるため)、レンダリングされたMVC Modelオブジェクトを渡す必要がある1つのViewModelで、ViewModelからアクセス可能なパブリックプロパティにして、アクセスできるようにしました他のViewModelの共有コンポーネントによってシリアル化されます。

于 2012-06-30T12:10:39.880 に答える