使用Scripts.Render MVC4时的Javascript全局变量

时间:2013-12-31 20:32:09

标签: javascript asp.net-mvc-4 global-variables render

我有一个利用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正在加载吗?

全局变量应该去哪里,如果一切都已经在渲染包中并且没有脚本块?

谢谢!

2 个答案:

答案 0 :(得分:5)

warningtimeout变量不是全局变量。它们仅在您为$函数提供的函数中定义。

我一般建议尽可能避免使用全局变量,但如果你真的想创建全局变量,只需使用它:

<script type="text/javascript">
   var warning = 10;
   var timeout = 20; 
</script>     

或者这个:

<script type="text/javascript">
   $(function () {
       window.warning = 10;
       window.timeout = 20;   
   });
</script>     

答案 1 :(得分:0)

感谢您的回复。

我认为在Ready页面中添加变量不会起作用。需要这些变量的函数在页面“准备好”之前加载(根据我的理解,这一切都是有效的),因此在新页面加载时会出现需要变量但未引用的情况。

这就是我目前处理它的方式:

我创建了一个新的.js文件,其中包含以下内容:

    var warning;
    var timeout;

然后我创建了对该文件的包引用,并以正确的范围顺序将其放入我的@ Script.Render stmt中。现在,我有了我的全局变量,它在我的视图代码中得到了很好的实现。现在,我知道我应该传递变量而不是将它们全局化,但在这种情况下我没有看到一个重大问题。