2013-08-21 46 views
5

私は、Cloud9で提供されているAceインブラウザのコードエディタを使用するMVC Webアプリケーションを開発しています。 ace.jsスクリプトとaceのエディタを設定するスクリプトは、ともに私のBundleConfig上のScriptBundleにあります。バンドルは完全に細かくロードされています。 web.configでデバッグをtrueに設定したローカルサーバーでは、スクリプトは正常に動作しました。しかし、web.configでデバッグをfalseに設定してライブサーバーに起動した後、いくつかのエラーが表示されました。エースが現在のディレクトリのテーマとモードを探すのを防ぐ方法は?

いくつかの小さな不具合を修正した後、原因がわからないような2つのエラーが残ります。これらの2つのエラーは、AceのクロムテーマとAceのHTMLモードスクリプトで404エラーが見つからないため、非常によく似ています。エディタを設定するスクリプトでは、次のように、彼らは呼ばれています。私のローカルコンピュータで

editor.setTheme("ace/theme/chrome"); 
editor.getSession().setMode("ace/mode/html"); 

、trueに設定し、デバッグして、テーマとモードが完全に罰金を設定し、計画通りにすべてが機能しています。しかし、私が言ったように、デバッグがfalseに設定されたライブサーバーでは、ScriptBundles内のすべてのスクリプトを縮小すると、テーマとモードの両方で404エラーが発生します。

Google ChromeでJavaScriptコンソールをプルアップすると、2つの404エラーが表示されます。 404エラーの面白い点は、表示しているページの現在のディレクトリにリンクしていること、続いて「theme-chrome.js」と「mode-html.js」が続いていることです。彼らは決してそのディレクトリにはいませんでしたが、それはまだありません。

なぜ私の質問は、現在のディレクトリでファイルが縮小された後に見えるようになるのですか?この問題を解決して、バンドルで細かく保ち、動作させるにはどうすればよいですか?または方法がありますか?

ご協力いただきありがとうございます。

答えて

12

私はAceとMVC BundlingとMinificationで、絶対参照を使用してace構成のbasePathを設定する必要があることがわかりました。

ace.config.set("basePath", "/Scripts/FullPathToMy/AceEditorDirectory"); 

これはおそらく最善の解決策ではありませんが、途中で解決するはずです。

+0

パーフェクトフォーム!それは魅力のように働いた。これを知ることは、多くの時間を節約してしまったでしょう。 – NoahWillCrow

+1

@Paul、これは最高の解決策です。 –

3

縮小したときにAceがベースパスを解決しないのは、縮小版がこのパターンと一致しない新しい一意の名前であるためです:^(.*)\/ace(\-\w+)?\.js(\?|$)/。エースはそのパターンを使用してそれを作成したスクリプト要素を探し、src属性を使用してパスを決定します。ポールの答え@

がベストですが、いくつかの理由のためにあなたがそのように行うことができない場合は、エースはまたdata-ace-で始まる属性のオプションをチェックすること任意のスクリプトタグの一部。あなたがベースパスを指定するには、スクリプトタグをレンダリングするScripts.RenderFormat(format, script)を使用することができ1.10System.Web.Optimization Vに

注:他のスタックオーバーフローの答えで彼らはMicrosoft.AspNet.Web.Optimizationを使用するように言っていないが、これはもはやケースです。お使いのバージョンを更新するにはnugetを使用する必要があります。

MVCバージョン

@Scripts.RenderFormat(@"<script src=""{0}"" data-ace-base=""/Scripts/ace/""></script>", "~/bundlepath") 

Webがバージョン

<%: Scripts.RenderFormat(@"<script src=""{0}"" data-ace-base=""/Scripts/ace/""></script>", "~/bundlepath") %> 
関連する問題