RequireJS 大约有一半时间为我工作。如果我刷新页面,它会随机出现加载问题。
我正在调整一个小型 MVC 项目以使用它,并执行以下操作:RequireJS 如何处理多个页面和部分视图?
我有一个常见的 main.js,它从我的主 _layout.cshtml 加载。以及使用上述技术的小部件和其他地方的其他部分视图。下面的示例来自我的登录页面:
<script type="text/javascript">
require(["jquery", "kendo", "domReady!"], function ($, kendo) {
$("#signInForm").kendoWindow({
draggable: false,
width: "500px",
modal: true,
title: "Sign In",
resizable: false
});
});
</script>
似乎 Chrome 有时会在 main.js 之前加载和处理内联脚本(其中定义了路径映射和其他配置)。要求“domReady”没有区别。
如何强制此脚本等到 require.js 和 main.js 运行?
一个不太理想的后备方法是将 jQuery 返回到它的全局范围并使用某种自定义事件。你有更好的主意吗?或者是否有一种内置到 RequireJS 中的方法?
更新:这是我现在在 _layout.cshtml 中使用的解决方法
<script src="@Url.Content("~/Scripts/jquery-1.7.2.min.js")" type="text/javascript"></script>
<script type="text/javascript">
function requireIt(requirements, callback) {
if ($(document).data("requireReady") === true) {
require(requirements, callback);
} else {
$(document).bind("requireReady", null, function () {
$(document).data("requireReady", true);
require(requirements, callback);
});
}
}
</script>
<script data-main="/scripts/main" src="@Url.Content("~/Scripts/require.js")" type="text/javascript"></script>
jQuery 恢复为全局夹具,我的部分视图及其内联脚本使用这个 requireIt 包装器。并且 main.js 触发 requireReady。