我正在用requireJS创建一个MVC3应用程序。在我的观点中,我需要将Model对象转换为一个knockout viewmodel对象。所以我需要使用knockout和knockout.mapping库。使用require.js加载“knockout.mapping”插件
我的应用程序设计以下列方式,
1)。所有脚本文件归类到文件夹中
- 脚本/应用/主页/ - 包含了Home控制器的意见脚本。
- 脚本/ LIB/- 包含如jQuery,敲除,knockout.mapping,requirejs等
2)的脚本。在“_Layout.cshtml”中,我引用了像这样的“require.js”。
<script src="@Url.Content("~/Scripts/lib/require.js")" type="text/javascript"></script>
3)。配置我使用所谓的 “common.js”(脚本/ lib目录/ common.js)
require.config(
{
baseUrl: "/Scripts/",
paths:{
jquery: "lib/jquery-2.0.3",
ko: "lib/knockout-2.3.0",
komapping: "lib/knockout.mapping"
}
});
4)不同的脚本文件require.js设置。这是我的index.js文件,该文件是在“脚本/应用/主页/”
define(['ko', 'komapping'], function (ko, komapping) {
var person = function() {
var self = this;
self.getPersonViewModel = function (data) {
return ko.mapping.fromJS(data); ;
};
};
return { Person: person };
});
5)这是我的‘家‘控制器
指数’中的行动方法’public ActionResult Index()
{
var person = new Person
{
Id = 1,
Name = "John",
Addresses = new List<Address>(new[]{new Address{Country = "Country 1", City = "City 1"}})
};
return View(person);
}
6)。最后,这是我的“索引”视图
@model MMS.Web.Models.Person
<script type="text/javascript">
require(["/Scripts/common/common.js"], function() {
require(["app/home/index"], function (indexJS) {
var person = new indexJS.Person();
var vm = person.getPersonViewModel(@Html.Raw(Json.Encode(Model)));
});
});
</script>
我现在面临加载index.js文件时的问题,我得到无法加载knockout.js的脚本错误。
无法加载资源:服务器与404状态(未找到)响应 - HTTP:///Scripts/knockout.js
但如果我删除 “komapping” 的依赖在“index.js”文件中它正确加载,但是我不能使用映射功能。
我看看这些环节里面,也没有找到一个解决方案, Knockout.js mapping plugin with require.js和 https://github.com/SteveSanderson/knockout.mapping/issues/57
您的帮助,建议都非常赞赏。谢谢!
Hi Hisa,谢谢! – Cheranga
http://stackoverflow.com/questions/18925717/knockout-mapping-require-js-bug。我试过使用这个解决方案,但得到错误。 – jmogera