我有一个利用javascript捆绑的MVC 4项目。
在我的_Layout.cshtml
页面中,我有这样的东西:
@Scripts.Render("~/bundles/scripts/desktop/modernizr",
"~/bundles/scripts/desktop/jquery","~/bundles/scripts/desktop/jqueryui",
"~/bundles/scripts/desktop/jqueryvalidation", "~/bundles/scripts/custom")
还有其他的,但这只是一个例子。 在自定义脚本中调用的一个脚本中,我需要引用在 ready 函数中设置的全局变量,如下所示:
<script type="text/javascript">
$(function () {
//alert('Page is ready!');
var warning = 10;
var timeout = 20; }); </script>
问题是,我似乎总是在需要警告和超时变量的方法中出现错误。 我是否错过了一些关于如何创建这些变量的明显内容(虽然对我来说不是!)? 我应该将它们var
$Ready
之外,因为 js 在页面技术准备就绪之前正在加载?
如果所有内容都已经在渲染包中并且没有脚本块,那么全局变量应该去哪里?
谢谢!
warning
和 timeout
变量不是全局变量。它们仅在您提供给$
函数的函数中定义。
我通常建议尽可能避免使用全局变量,但如果您真的想创建全局变量,只需使用它:
<script type="text/javascript">
var warning = 10;
var timeout = 20;
</script>
或者这个:
<script type="text/javascript">
$(function () {
window.warning = 10;
window.timeout = 20;
});
</script>
感谢您的回复。
我认为在"就绪"页面中添加变量不起作用。 需要这些变量的函数在页面"就绪"之前加载(根据我的理解,这一切是如何工作的),因此在新页面加载时,在某些情况下,变量将是必需的,但未被引用。
这是我目前处理它的方式:
我创建了一个新的.js文件,其中包含以下内容:
var warning;
var timeout;
然后,我创建了一个对该文件的捆绑引用,并按照正确的范围顺序将其放入我的 @Script.Render stmt 中。 现在,我有了全局变量,它已干净地实现到我的视图代码中。 现在,我知道我应该传递变量而不是全局变量,但在这种情况下,我没有看到什么大问题。