Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问RequireJS从PartialView传回的现有javascript对象_Javascript_Asp.net Mvc_Knockout.js_Requirejs - Fatal编程技术网

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

如何访问RequireJS从PartialView传回的现有javascript对象,javascript,asp.net-mvc,knockout.js,requirejs,Javascript,Asp.net Mvc,Knockout.js,Requirejs,使用ASP.NETMVC、KnockoutJS和我正在使用RequiredJS 我有一个视图,我正在传回一个对象,该对象保留2个淘汰视图模型。为了保持简单,父视图是一个项目列表。您可以通过单击相应的按钮来创建新产品或编辑列表中的产品。任何一个按钮都将初始化jQuery对话框,该对话框通过从我的控制器获取返回的PartialView来填充 在检索部分视图时,我将一个淘汰视图模型(原始返回的RequireJS对象的属性)绑定到该部分视图。我在创建新产品、获取KO视图模型并将其保存回控制器操作方面没有

使用ASP.NETMVC、KnockoutJS和我正在使用RequiredJS

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

在检索部分视图时,我将一个淘汰视图模型(原始返回的RequireJS对象的属性)绑定到该部分视图。我在创建新产品、获取KO视图模型并将其保存回控制器操作方面没有问题

问题

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

我能在partialview上获得MVC模型的唯一错误方法是在partialview上连接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")'
          });
      });
  });
      ....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>
…一堆html


@{
require(['jquery','items/adminItemsList','jqueryvalidate unobtrusive',函数($,viewModel){
$(函数(){
viewModel.initialize({
addUrl:“@Url.Action(“Add”)”,
listUrl:“@Url.Action(“List”)”,
editUrl:“@Url.Action(“Edit”)”,
deleteUrl:'@Url.Action(“删除”)'
});
});
});
}

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")'
          });
      });
  });
      ....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>
…一堆Html
viewModel.Model(@Html.Json(Model))//我需要能够像这样做
Json方法只是一个HtmlHelper扩展

如何将返回的RequireJS对象设置为可访问的,或者如何更好地进行设计

我有并需要:

  • 我有产品列表视图
  • 创建/编辑产品的视图
  • 产品列表视图javascript拥有生成创建/编辑产品视图的jQuery对话框,因此它不需要中断回调函数(即onSuccessfulSubmit…)

  • 想法?

    我最后做的是拆分我的视图模型(因为实际上有两个不同的视图),并在一个视图模型上传递渲染的MVC模型对象,我将其设置为ViewModel之外的可访问公共属性,以便其他ViewModel的共享组件可以对其进行访问和序列化。

    您是否考虑过从服务器获取JSON格式的产品,并让knockout使用其自己的模板进行渲染?是的,但由于我使用的是客户端验证,使用的是数据注释,如果不将模型传递到视图中,我不确定如何做到这两个方面(但很容易做到)。