2

为了保持不显眼的 JavaScript 指南,我将所有 JavaScript 从我的每个视图中移出并放入单独的 .js 文件中。

但是,在 1 个视图中,我需要动态创建一些 JavaScript 变量,以便将这些变量插入 ViewBag 并直接呈现到视图中:

    $(document).ready(function () {
        @(ViewBag.PrePop)
        @(ViewBag.PreDiscount)
    });

在我尝试使用新的 ASP.net 捆绑和缩小功能之前,这一切正常。

将所有这些小的外部 JavaScript 文件捆绑在一起,然后从每个页面调用组合脚本意味着每个页面(包含 ViewBag 发出的变量的页面除外)都有一个变量引用错误:

Uncaught ReferenceError: quotes is not defined 

所以这基本上意味着我不能捆绑这个特定的 JavaScript 文件。

但是,我想缩小它。为此,我是否只需声明一个仅包含一个 JavaScript 文件的包:

bundles.Add(new ScriptBundle("~/bundles/mypagescript").Include(
            "~/Scripts/mypagescript.js"));

还是有另一种方法可以单独执行缩小?

4

2 回答 2

3

是的,目前我们并没有真正公开任何方法让您轻松调用优化只是为了缩小字符串(JsMinify.Process如果您真的想要,您可以通过一个实例来实现)即:

string js = "//I am a comment\r\nfoo = bar;\r\nfoo = yes;";
JsMinify jsmin = new JsMinify();
BundleContext context = new BundleContext();
BundleResponse response = new BundleResponse(js, null);
response.Content = js;
jsmin.Process(context, response);
Assert.AreEqual("foo=bar,foo=yes", response.Content);

但是您的建议可能是最好的(创建一个文件的捆绑包)。

于 2012-06-29T22:28:38.323 回答
2

抱歉回复晚了 ;)

您可以使用 Microsoft.Ajax.Utilities.Minifier。创建一个实例并调用 MinifyJavaScript - 它将一个字符串(JS 代码)作为参数并返回缩小后的代码。

Dim minifier As New Microsoft.Ajax.Utilities.Minifier()
minifier.MinifyJavaScript(script)

然后,您可以创建自己的 HTML 助手或操作来调用它。这至少在我的情况下效果很好;)

于 2014-01-02T10:47:09.110 回答