2013-03-20 47 views
0

出錯了,我找不出來。MVC應用程序中的Require.js

_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> 
} 

和它拋出404試圖找到jquery.js。我究竟做錯了什麼?

UPD:如果評論的一切index.cshtml並投入main.js結束它像

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

是main.js被調用,它顯示

+0

首先,你爲什麼要渲染腳本?請requireJs處理這件事。其次,你有沒有調試到main.js,看看是否被調用? – 2013-03-20 20:10:34

+0

愚蠢的問題:jquery.js是在正確的地方,是嗎? – 2013-03-20 20:10:44

+0

是@DavidL main被調用。我想爲每個視圖設置'code-behind'.js。所以在每個視圖腳本部分應該需要一個模塊 – Agzam 2013-03-20 20:14:22

回答

0

所以我結束了從_Layout.cshtml去除data-main屬性,並從頁面調用主直接:

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

它剛發生的消息對我來說你的問題是。你正在使用路徑,你應該使用地圖。

請嘗試以下操作,它會將您的jquery文件映射到您的簡稱。

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

此外,有一個很好的機會,如果你打它的索引沒有加載您requirejs文件中的時間。如果您首先在您的索引中聲明瞭它,我認爲這可以防止競爭狀況。

1

@David L is correct.

當腳本內的JavaScript中運行index.cshtml塊,你require.config塊可能尚未運行。

1

看來,你應該把在_Layout.cshtml,主要參考頭部代碼的腳本部分。 JS通常是在頭上,所以配置之前被調用,我想這就是原因。