2012-03-27 4 views
3

Ich bekomme eine Menge Fehler bei der Verwendung von SquishIt in meiner MVC3-Anwendung mit JQuery-Plugins von Drittanbietern. Wenn ich die ForceDebug-Methode für den Bundle-Befehl auf meinem Entwicklungscomputer einstelle, funktioniert alles einwandfrei und der JS wird normal verarbeitet. Wenn ich jedoch die Methode ForceRelease (vor dem Rollout in die Produktion) einstelle, zeigt FireFox beim Aufrufen der Website "Fehler" an, dass es sich nicht um eine Funktion handelt. Ich habe versucht, compilation debug="true" in der web.config ohne Verbesserung einzustellen.SquishIt ForceRelease in MVC3 nicht ordnungsgemäß JQuery Plugins

Hier sind die JS-Aufrufe in meiner _layout.cshtml-Datei. Alle Bündelung ist für Standard-JQuery Plugins:

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script> 
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script> 
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js"></script> 
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-ui-1.8.18.custom.min.js")"></script> 
@(Bundle.JavaScript() 
    .Add("~/Scripts/modernizr-2.5.3.js") 
    .Add("~/Scripts/jquery.fileinput.js") 
    .Add("~/Scripts/jquery.numeric.js") 
    .Add("~/Scripts/jquery.maskedinput-1.3.min.js") 
    .Add("~/Scripts/jquery.maxlength_countdown.js") 
    .Add("~/Scripts/jquery.qtip.min.js") 
    .Add("~/Scripts/jquery.pnotify-1.1.0.min.js") 
    .Add("~/Scripts/fileuploader.js") 
    .Add("~/Scripts/jquery.dropdownchecklist-1.4.js") 
    .Add("~/Scripts/jquery.blockUI.js") 
    .Add("~/Scripts/jquery.textarearesizer.min.js") 
    .ForceRelease() 
    .MvcRender("~/CompiledContent/combined_#.js") 
) 

Hier ist ein Beispiel von Fehler, die FireFox-Displays ist. Diese Änderungen basieren auf, was ich in dem Bündel enthalten haben:

function (n) {var i = (n.browser.msie ? "paste" : "input") + ".mask", t = window.orientation != undefined;n.mask = {definitions: {9: "[0-9]", a: "[A-Za-z]", '*': "[A-Za-z0-9]"}, dataName: "rawMaskFn"}, n.fn.extend({caret: function (n, t) {if (this.length != 0) {if (typeof n == "number") {return t = typeof t == "number" ? t : n, this.each(function() ... bla bla YADDA - weitere 50 Zeilen Skript hier ... function() {setTimeout(i, 0);})();}).bind("blur.mask", function() {v(), c.val() != p && c.change();}).bind("keydown.mask", nt).bind("keypress.mask", d).bind(i, function() {setTimeout(function() {c.caret(v(true));}, 0);}), v();});}});}(jQuery) is not a function

$(".dropdown-checklist").dropdownchecklist is not a function

Irgendwelche Gedanken auf, was Ich könnte hier versaut haben?

Antwort

8

Wir haben so etwas schon mal erlebt ... herausgefunden, dass eine der Dateien am Ende der JavaScript-Funktion kein Semikolon hatte. Dies verursachte jede Art von Chaos. Die Funktion funktioniert gut, wenn es sich um eine Datei handelt, aber sobald sie kombiniert ist, macht das Semikolon einen Unterschied.

Sie können den Minifier auch als Null-Minifier festlegen und die von ihm erstellte Ausgabe anzeigen. Dies kann bei der Fehlersuche hilfreich sein.

+0

Sie rocken Mark! Das hat mich in die richtige Richtung gelenkt. Für andere habe ich herausgefunden, dass 'jquery-numeric.js' einige nicht abgeschlossene Funktionen hatte und dass' jquery-maskedinput-1.3' nach '} (jQuery)) kein abschließendes Semikolon hatte;). Danke noch einmal! – bigmac

+3

Ich hatte genau das gleiche Problem. Eine Javascript-Datei von Drittanbietern, die nicht mit einem Semikolon endete. Ich werde jeden anderen etwas googeln, so fügen Sie einen Null-Minifier hinzu: .WithMinifier (new SquishIt.Framework.Minifiers.JavaScript.NullMinifier()) – Arbiter