MVC app中的Require.js

时间:2013-03-20 20:08:27

标签: c# javascript asp.net-mvc-4 requirejs

出了点问题,我无法理解。

_Layout.cshtml有:

 <body>
      <script data-main="Scripts/main" 
          src="@Url.Content("~/Scripts/require.js")" 
          type="text/javascript">
      </script>

      @RenderSection("scripts", required: false)
</body>

/Scripts/main.js:

require.config({
   paths: {
       "jquery": "jquery-1.9.1"
   }
});

一直到index.cshtml:

@section scripts
{
    <script type="text/javascript">
        require(['jquery'], function ($) {

        });
    </script>
}

并且它试图找到jquery.js抛出404。我做错了什么?

upd:是的,main.js被调用,如果在index.cshtml中注释所有内容并将其放到main.js的末尾,那就像

require([
    'jquery'
], function ($) {
   $(function(){
      alert('jquery loaded');
   })
});

显示消息

4 个答案:

答案 0 :(得分:2)

我刚刚想到你的问题是什么。您正在使用路径,您应该使用地图。

尝试以下操作,它会将您的jquery文件映射到一个简短的名称。

require.config({
   baseUrl: '/scripts',
   map: {
       "jquery": "jquery-1.9.1.js"
   }
});

此外,如果您点击索引它没有及时加载您的requirejs文件,那么很有可能。如果你先在索引中声明它,我认为这可以防止竞争条件。

答案 1 :(得分:1)

@David L is correct.

当index.cshtml中的脚本块内的javascript运行时,您的require.config块可能还没有运行。

答案 2 :(得分:1)

看来你应该将脚本部分放在_Layout.cshtml的head标签中,main.js的引用通常在head中,所以之前调用了配置,我猜这就是原因。

答案 3 :(得分:0)

所以我最后从data-main删除_Layout.cshtml属性并直接从该页面调用main:

@section scripts
{
    <script type="text/javascript">
        require(['Scripts/main'], function () {
            require([ "views/home-index"] );
        });
    </script>
}