Ich habe eine App mit Yeoman und backbone.js geschrieben. Am Anfang jeder js-Datei habe ich 'use strict';
angegeben und wenn ich meine Grunt-Tasks ausführe, stößt jshint nicht auf Fehler.Problem mit 'Use strict' und underscore.js
Ich bin in der Lage meine app mit Grunzen jedoch ohne Problem zu bauen, wenn ich versuche, die uglified js ich folgende Fehlermeldung erhalten auszuführen:
Uncaught SyntaxError: Strict mode code may not include a with statement
ich die Code-Basis und die einzigen Dinge gesucht haben Die Verwendung einer with-Anweisung ist ein Unterstrich.
Ich bin neu im strikten Modus, also bin ich mir nicht sicher, wie ich dieses Problem lösen kann. Kann ich den strict-Modus nicht überall verwenden, wo ich eine Funktion "underscorejs" verwende?
Danke.
EDIT:
die Codebeispiele unten (verkürzt der Kürze halber) gegeben. Wie kann ich es ändern, um dieses Problem zu beheben?
'use strict';
/*global, Backbone, JST*/
var MyView = Backbone.View.extend({
template: JST['app/scripts/templates/MyView.ejs'],
initialize: function()
{
this.render();
},
render : function()
{
this.$el.html(this.template(this.templateVariables()));
return this;
},
templateVariables: function()
{
return {var1 : 'Hello', var2 : 'World'};
}
});
in MyView.ejs
<p><%= var1 %><%= var2 %>!</p> //<p>Hello World!</p>
EDIT 2:
Mit @mu auch ist die Antwort von Shorts unten entdeckte ich, dass der beste Weg, um die Anrufe zu lösen, das _.template gab mir Gram war meine Grunt-JST Aufgabe ändern wie folgt:
Und dann ändern Sie jede meiner Vorlagen, um das <%= data.templateVariable %>
Format zu verwenden.
Kann nicht für andere gelten, aber ich stieß auf dieses Problem mit Yeoman mit Grunt und einem Backbone-Generator, so dass ich nicht der einzige sein kann.
Verwenden Sie vorkompilierte Underscore-Vorlagen irgendwo? Das einzige 'with' in Underscore befindet sich innerhalb des Codes, den' _.template' erzeugt, so dass niemand darauf achten sollte, dass 'mit' verwendet wird, es sei denn, sie sehen sich die kompilierten Template-Funktionen an, die' _.template' erzeugt. –
Nur damit ich verstehe, fragen Sie, ob ich irgendwo unter _.template() verwende? Ja bin ich. Ich gehe davon aus, dass ich in dieser Datei mit dem strikten Modus selektiver sein muss? – adampetrie
@mu ist zu kurz - ich habe etwas mehr gegraben. Ich verwende JST-Vorlagen in der gesamten Anwendung. Die vorkompilierte templates.js wird mit Anweisungen verwendet. Also meine Frage wird dann, wie kann ich das lösen? Wenn ich die 'use strict;' - Direktiven in den View-Dateien entferne, die JST-Templates haben und dann 'grunt --force' ausführen und die jshint-Fehler ignorieren, bekomme ich immer noch dasselbe Endergebnis mit dem minimierten js. Gedanken? Vielen Dank. – adampetrie