如何从PartialView访问RequireJS传回的现有javascript对象

时间:2012-06-28 17:43:31

标签: javascript asp.net-mvc knockout.js requirejs

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

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

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

问题

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

我可以在传入的partialview上获得MVC模型的唯一错误方式是,如果我在局部视图上连接Require JS并传回 new 对象的实例并传入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 Dialog 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 个答案:

答案 0 :(得分:0)

我最终做的是拆分我的ViewModel(因为实际上有两个不同的视图),并且在我需要传递渲染的MVC Model对象的一个​​ViewModel上,我使它成为ViewModel之外的可访问的公共属性,所以它可以通过其他ViewModel的共享组件进行访问和序列化。