Создание помощника для минимизации JS; Что я делаю неправильно? - PullRequest
0 голосов
/ 19 февраля 2012
public class JavaScriptHelper
{
    public HelperResult Minify(Func<HelperResult> code)
    {
        return new HelperResult(writer => writer.Write(JavaScriptCompressor.Compress(code().ToString())));
    }
}

@section Script
{
@JavaScriptHelper.Minify(
@<script>
    (function ($, b) {
        $(function () {
            $("#upload").bind("submit", function (e) {
                e.preventDefault();
                console.log("going");
                $(this).ajaxSubmit(function (result) {
                    if (!b.ajaxFailure(result, true)) {
                        console.log(result);
                    }
                });
            });
        });
    })(jQuery, b);
</script>)
}

1 Ответ

1 голос
/ 19 февраля 2012

Помощник должен быть статичным, и Razor будет передавать Func<dynamic, HelperResult>, а не просто Func<HelperResult>.Кроме того, вам не нужно передавать <script></script> в минификатор, поэтому переместите их за пределы вызова JavaScriptHelper.Minify(...), а затем оберните содержимое с помощью <text></text>, чтобы Razor знал, как его анализировать.Попробуйте это:

public class JavaScriptHelper
{
        public static HelperResult Minify(Func<dynamic, HelperResult> code)
        {
            return new HelperResult(writer => writer.Write(JavaScriptCompressor.Compress(code(null).ToString())));
        }
}

@section Script
{
    <script>
    @JavaScriptHelper.Minify(
    @<text>
    (function ($, b) {
        $(function () {
            $('#upload').bind('submit', function (e) {
                e.preventDefault();
                console.log('going');
                $(this).ajaxSubmit(function (result) {
                    if (!b.ajaxFailure(result, true)) {
                        console.log(result);
                    }
                });
            });
        });
    })(jQuery, b);

    </text>)
    </script>

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...