私はYeomanとbackbone.jsを使ってアプリを書いています。すべてのjsファイルの先頭には'use strict';
が指定されています。私が不快な作業を実行すると、jshintはエラーに遭遇しません。私は、コードベースを検索したwith use with 'strict'とunderscore.js
Uncaught SyntaxError: Strict mode code may not include a with statement
と唯一のもの:私は、私は次のエラーを取得するuglified JSを実行しようとすると、
は、しかし私は、問題なくうなり声と私のアプリを構築することができていますwithステートメントを使用すると、アンダースコアになります。
私は厳密なモードに慣れていないので、この問題をどのように解決できるかわかりません。私がunderscorejs関数を使用する場所で厳密なモードを使用することはできませんか?
ありがとうございました。
EDIT:以下のコードサンプルを考える
(簡潔にするために短縮)。この問題を解決するには、どうすれば変更できますか? MyView.ejsで
'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'};
}
});
<p><%= var1 %><%= var2 %>!</p> //<p>Hello World!</p>
EDIT 2:
私は最善の方法があること_.templateへの呼び出しを解決することを発見の下@muがあまりにもショートパンツの答えである使い方私に悲しみを与えていたのは、わざわざJSTの仕事を次のように変更したことです:
jst: {
compile: {
options:
{
templateSettings:
{
variable: 'data'
}
},
files: {
'.tmp/scripts/templates.js': ['<%= yeoman.app %>/scripts/templates/*.ejs']
}
}
},
そして、それぞれのテンプレートを<%= data.templateVariable %>
形式を使用するように変更します。
他人には当てはまらないかもしれませんが、私はGromanとBackboneジェネレータを備えたYeomanを使用してこの問題に遭遇しました。
プリコンパイルされたアンダースコアテンプレートをどこかで使用していますか? Underscoreの 'with'は' _template'が生成するコードの中にあり、 '_'が生成するコンパイルされたテンプレート関数を見ていない限り誰も' 'が使われていることに気づくべきではありません。 –
ちょうど私が理解しているので、あなたは_template()の下でどこでも使用していますか?はい、そうです。私はそのファイルの厳密なモードでより選択的にする必要があると仮定していますか? – adampetrie
@muが短すぎます - 私はもう少し掘り下げました。私はアプリケーション全体でJSTテンプレートを使用しています。プリコンパイルされたtemplates.jsは、その中のステートメントとともに使用します。だから私の質問はどのように私はこれを解決することができますか? JSTテンプレートを持つビューファイルで 'use strict;'ディレクティブを削除し、 'grunt --force'を実行してjshintエラーを無視すると、縮小されたjで同じ結果が得られます。思考?ありがとう。 – adampetrie