Ho scritto un'app utilizzando Yeoman e backbone.js. Nella parte superiore di ogni file js ho specificato 'use strict';
e quando eseguo le mie attività grunt, jshint non incontra errori.Problema con con 'use strict' e underscore.js
sono in grado di costruire la mia app con grugnito senza problema tuttavia quando provo a fare funzionare i js uglified ottengo il seguente errore:
Uncaught SyntaxError: Strict mode code may not include a with statement
Ho cercato la base di codice e le uniche cose l'utilizzo di un'istruzione with è underscore.
Sono nuovo in modalità rigorosa quindi non sono sicuro di come sia possibile risolvere questo problema. Posso usare la modalità strict ovunque non utilizzi una funzione underscorejs?
Grazie.
EDIT:
dato il codice campioni sottostanti (abbreviato per brevità). Come posso cambiarlo per risolvere questo problema.
'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:
utilizzando @mu è troppo la risposta di pantaloncini di seguito ho scoperto che il modo migliore per risolvere i chiamate a _.template che mi stava dando il dolore era cambiare il mio compito grint-JST come segue:
jst: {
compile: {
options:
{
templateSettings:
{
variable: 'data'
}
},
files: {
'.tmp/scripts/templates.js': ['<%= yeoman.app %>/scripts/templates/*.ejs']
}
}
},
E quindi modificare ciascuno dei miei modelli per utilizzare il formato <%= data.templateVariable %>
.
Potrebbe non essere applicabile ad altri, ma mi sono imbattuto in questo problema utilizzando Yeoman con Grunt e un generatore Backbone, quindi non posso essere l'unico.
Si sta utilizzando i modelli Underscore precompilati da qualche parte? L'unico 'with' in Underscore è all'interno del codice che' _.template' genera, quindi nessuno dovrebbe nemmeno sapere che 'with' viene usato a meno che non stiano guardando le funzioni del template compilato che' _.template' produce. –
Solo così ho capito, mi stai chiedendo se sto usando sotto _.template() ovunque? Sì, lo sono. Suppongo quindi di dover essere più selettivo con la modalità rigorosa in quel file? – adampetrie
@mu è troppo corto - ho scavato un po 'di più. Sto usando i modelli JST in tutta l'applicazione. Templates.js precompilato utilizza con istruzioni in tutto questo. Quindi la mia domanda diventa quindi come posso risolvere questo? Se rimuovo le direttive 'use strict;' nei file di visualizzazione che hanno template JST e poi eseguo 'grunt --force' e ignoro gli errori jshint, ottengo lo stesso risultato finale con il js minificato. Pensieri? Grazie. – adampetrie