6

私は、Cloud9 が提供する Ace ブラウザー内コード エディターを使用する MVC Web アプリケーションに取り組んできました。ace.js スクリプトと ace のエディターをセットアップするスクリプトは、BundleConfig の ScriptBundle に一緒に含まれています。バンドルは完全に正常にロードされています。私のローカル サーバーでは、web.config で debug を true に設定すると、スクリプトは問題なく動作しました。ただし、web.config でデバッグを false に設定してライブ サーバーを起動すると、いくつかのエラーが表示されました。

いくつかのマイナーな不具合を修正した後、原因を理解できないように見える 2 つのエラーが残っています。これら 2 つのエラーは、どちらも Ace の chrome テーマと Ace の HTML モード スクリプトの 404 not found エラーであるため、非常によく似ています。エディターを設定するスクリプトでは、次のように呼び出されます。

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」が続くことです。それらは決してそのディレクトリにありませんでしたし、今でもありません。

私の質問は、縮小された後、スクリプトが現在のディレクトリでファイルを探し始めるのはなぜですか? この問題を解決するにはどうすればよいですか? それとも方法はありますか?

事前にご連絡いただきありがとうございます。

4

2 に答える 2

12

Ace と MVC のバンドルと縮小を使用すると、絶対参照を使用して ace 構成で basePath を設定する必要があります。

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

それはおそらく最善の解決策ではありませんが、あなたの道を歩むはずです.

于 2013-08-21T02:16:16.180 に答える
3

縮小したときに Ace がベース パスを解決しない理由は、縮小されたバージョンがこのパターンに一致しない新しい一意の名前であるためです^(.*)\/ace(\-\w+)?\.js(\?|$)/。Ace はそのパターンを使用して、そのパターンを作成したスクリプト要素を見つけ、src属性を使用してパスを決定します。

@Paulの答えが最善ですが、何らかの理由でそのようにできない場合、Aceはスクリプトタグのそのdata-ace-部分で始まる属性のオプションもチェックします。

System.Web.Optimization v 1.10ではScripts.RenderFormat(format, script)、スクリプト タグをレンダリングしてベース パスを指定 できます。

注:他のスタック オーバーフローの回答では、 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") %>
于 2013-09-24T16:34:15.290 に答える