【发布时间】:2012-06-30 07:06:29
【问题描述】:
使用 ASP.NET MVC、KnockoutJS,我正在使用 Require JS。
我有一个视图,我正在传回一个保留 2 个 Knockout 视图模型的对象。为了简单起见,父视图是一个项目列表。您可以通过单击相应的按钮来创建新产品或编辑列表中的产品。任何一个按钮都会初始化一个 jQuery 对话框,该对话框是通过从我的控制器获取返回的 PartialView 来填充的。
在检索局部视图时,我将一个 Knockout View 模型(原始返回的 RequireJS 对象上的属性)绑定到该局部视图。创建新产品、采用 KO 视图模型并将其保存回控制器操作时,我没有任何问题。
问题
在尝试将现有产品加载到 PartialView 时出现问题。我需要能够用初始值填充 KO viewModel。一个可能的解决方案是,如果我可以将 MVC 视图 model 从控制器传递到我现有的 RequireJS 对象中,我可以使用现有属性值初始化 KO 视图模型。但是,我无法弄清楚如何在部分视图视图的产品列表视图中访问 existing 返回的 javascript 对象。
我可以在传入的局部视图上获取 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 对话框部分视图
....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 对象设置为可访问,或者有什么更好的设计方法。
我有并且需要:
- 我有产品列表视图
- 创建/编辑产品的视图
- 产品列表视图 javascript 拥有生成创建/编辑产品视图的 jQuery 对话框,因此它不需要中断回调函数(即 onSuccessfulSubmit...)
想法?
【问题讨论】:
-
您是否考虑过从服务器获取 JSON 格式的产品,并让 Knockout 使用自己的模板进行渲染?
-
是的,但是由于我通过使用 Data 注释来使用客户端验证,如果不将模型传递到您的视图中,我不确定您如何做到这两点(但很容易)。
标签: javascript asp.net-mvc knockout.js requirejs