MVC4与TinyMCE捆绑在一起

时间:2013-04-10 10:51:55

标签: asp.net-mvc-4 tinymce bundle

我在使用MVC4 Bundling和TinyMCE时遇到了问题。我收到这个错误:

    GET http://localhost:54717/Admin/EditText//langs/da.js 404 (Not Found) Site:1
    GET http://localhost:54717/Admin/EditText//plugins/lists/editor_plugin.js 404 (Not Found) Site:1
    GET http://localhost:54717/Admin/EditText//plugins/autolink/editor_plugin.js 404 (Not Found) Site:1
    GET http://localhost:54717/Admin/EditText//themes/advanced/editor_template.js 404 (Not Found) Site:1
    GET http://localhost:54717/Admin/EditText//plugins/spellchecker/editor_plugin.js 404 (Not Found) Site:1
    GET http://localhost:54717/Admin/EditText//plugins/pagebreak/editor_plugin.js 404 (Not Found) Site:1
    GET http://localhost:54717/Admin/EditText//plugins/style/editor_plugin.js 404 (Not Found) Site:1
    GET http://localhost:54717/Admin/EditText//plugins/table/editor_plugin.js 404 (Not Found) Site:1
    GET http://localhost:54717/Admin/EditText//plugins/layer/editor_plugin.js 404 (Not Found) Site:1
    GET http://localhost:54717/Admin/EditText//plugins/save/editor_plugin.js 404 (Not Found)
Failed to load: http://localhost:54717/Admin/EditText//langs/da.js 

代码如下(在BundleConfig.cs中)

bundles.Add(
      new ScriptBundle("~/Scripts/Site").Include(
        "~/Scripts/jquery-1.9.1.js",
        "~/Scripts/tinymce/tiny_mce.js",
         "~/Scripts/jquery-ui-1.10.1.js",
        "~/Scripts/jquery.ui.slider.js",
        "~/Scripts/oline.Base.js",
        "~/Scripts/Validate/Language/jquery.validationEngine-da.js",
        "~/Scripts/Validate/jquery.validationEngine.js",
        "~/Scripts/jquery.ui.effect-blind.js",
        "~/Scripts/jquery.placeholder.min.js"));

      BundleTable.EnableOptimizations = true; 

在布局中:

@Scripts.Render("~/Scripts/Site")

但是,如果我删除tiny_mce.js形成捆绑并将其放置如此&lt; script src="~/Scripts/tinymce/tiny_mce.js"></script>它可以正常工作。是因为我需要通过tinymce覆盖自动加载并手动放置吗?

5 个答案:

答案 0 :(得分:28)

在调用tinymce.init之前,请执行以下操作:

tinymce.baseURL = "@Url.Content("~/Scripts/tinymce")";

或者保存脚本的地方。

我有同样的问题。这是我的最终产品

    <script>
    tinymce.baseURL = "@Url.Content("~/Scripts/tinymce")";

    // tinyMCE setup
    tinymce.init({
        selector: "textarea.rt-edit",
        browser_spellcheck: true,
        menubar: false,
        plugins: "paste,preview,code,textcolor,link",
        invalid_elements: "script",

        // Theme options - button# indicated the row# only
        toolbar1: "bold italic underline strikethrough subscript superscript link | fontselect fontsizeselect forecolor backcolor | justifyleft justifycenter justifyright cut copy paste pastetext pasteword| outdent indent | undo redo | code preview ",

    });
</script>

答案 1 :(得分:15)

今天也遇到了这个问题。似乎捆绑了tinymce时,它无法找到其他依赖脚本(插件,编辑器模板等)。

由于TinyMCE已经缩小,我只是将其从捆绑中排除并单独加载来解决这个问题。像这样:

@* include tinymce unbundled so it can find its plugins and other scripts internally when bundles are optimized *@
@if (BundleTable.EnableOptimizations)
{
    <script type="text/javascript" src="~/scripts/tinymce/tiny_mce.js"></script>
}
else
{
    <script type="text/javascript" src="~/scripts/tinymce/tiny_mce_src.js"></script>
}

@Scripts.Render("~/Scripts/Site")

这样,在启用优化时仍然使用预缩小版本,在调试时仍使用原始源代码。它最终会导致浏览器发送多个请求。

答案 2 :(得分:9)

@Codeacula有一个很好的解决方案,但另一种方法是将捆绑路径相对于TinyMCE文件夹。

请注意,您必须将其从主Script包中取出才能使其正常工作,但由于我没有在每个页面上使用TinyMCE,因此将其添加到主包中是没有意义的。另外,我使用 .min.js 作为扩展名,因为它根据主文件扩展名加载插件,除了 .min.js 文件之外我什么都没有我的插件文件夹。

var tinymce = new ScriptBundle("~/Scripts/tinymce/tinymce-bundle.min.js")
    .Include("~/Scripts/tinymce/tinymce.min.js");
bundles.Add(tinymce);

在需要TinyMCE的网页上:

@Scripts.Render("~/Scripts/tinymce/tinymce-bundle.min.js");

答案 3 :(得分:1)

我知道自己正在挽救一个久违的职位,但是,由于我今天才偶然碰到这个问题,所以我想到降低2美分。

上面接受和/或批准的答案很好,并且一切都很好,但是它们并没有满足我的需求,因为它没有与服务器的多个连接的开销,以便下载使tinyMCE正常工作所需的所有js。 let obj = {}; obj.greet = function sayHello() { console.log("hello"); }; farewell = function sayBye() { console.log("Bye"); }; 正在请求他们。

由于我发现实际上在主要js文件中有一个javascript加载器,仅当尚未定义变量(在声明的变量中)时才下载所需的脚本,因此我考虑将整个.js设置为一个捆绑包,这样当您调用farewell函数脚本时就不需要下载。 像这样:

tinymce(.min).js

假设您的tinyMCE位于文件夹.init中。

不再触发最新的脚本下载,并且最小化和捆绑您的tinyMCE js(在Release配置中)

答案 4 :(得分:0)

在我的情况下,我会执行以下操作来解决: 忽略捆绑并直接引用插件的缩小版本。

@section scripts
{
    @Scripts.Render("~/bundles/ajax")
    @Scripts.Render("~/bundles/jqueryval")
    <script src="~/Scripts/tinymce/tinymce.min.js"></script>
}