0

使用 ASP.NET MVC、KnockoutJS,我正在使用 Require JS。

我认为我正在传回一个保留 2 个 Knockout 视图模型的对象。为了简单起见,父视图是一个项目列表。您可以通过单击相应的按钮来创建新产品或编辑列表中的产品。任何一个按钮都会初始化一个 jQuery 对话框,该对话框是通过从我的控制器获取返回的 PartialView 来填充的。

在检索局部视图时,我将一个 Knockout View 模型(原始返回的 RequireJS 对象上的属性)绑定到该局部视图。创建新产品、采用 KO 视图模型并将其保存回控制器操作时,我没有任何问题。

问题

尝试将现有产品加载到 PartialView 时会出现问题。我需要能够用初始值填充 KO viewModel。一个可能的解决方案是,如果我可以将 MVC 视图模型从控制器传递到我现有的 RequireJS 对象中,我可以使用现有属性值初始化 KO 视图模型。但是,我无法弄清楚如何在部分视图视图中访问产品列表视图中现有的返回 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 对话框部分视图

      ....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

我最终做的是拆分我的 ViewModel(因为确实有两个不同的视图),并且在我需要传递渲染的 MVC Model 对象的一个​​ ViewModel 上,我将它设置为 ViewModel 的可访问公共属性,以便可以访问它并由其他 ViewModel 的共享组件序列化。

于 2012-06-30T12:10:39.880 回答