以前にこのエラーが発生し、SOで見つけた解決策を試しましたが、この場合、見つけた解決策を試しても回避できません。ファイルの下部に js スクリプト タグを付けてインデックス ファイルのヘッダーに配置した question_template があります。ビューのイニシャライザでは、jQuery html 関数を使用してテンプレートを取得します。コンソール ログには、テンプレートが index.html から取得されたことが示されます。ただし、アンダースコア _.template に挿入しようとすると、can't call replace of undefined エラーが発生します。
var QuestionView = Backbone.View.extend({
el: $(".east"),
initialize: function(){
var template = $('#question_template').html();
console.log(template);
this.template = _.template(template); #error triggered
},
テンプレートをログに記録できるので、何が問題なのかわかりません。これはアンダースコア コードの一部です。
text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
source += text.slice(index, offset)
.replace(escaper, function(match) { return '\\' + escapes[match]; });
最初の質問: 「テキスト」は何を表しますか?私の場合は未定義です。「テキスト」がテンプレートだと思っていましたが、テンプレートをログに記録できるので、どのように未定義ですか?
また、ドキュメントにラップされたすべての js コード (質問ビューの初期化を含む) を用意しました。これは、この問題に関する他の SO の質問で解決策でした。
$(function() {
...code ommitted...
var question_view = new QuestionView({ model: game});
});
2 番目の質問: 他に試せることはありますか
更新 メモ、その後モデルデータをテンプレートに渡しますが、エラーがトリガーされるため、そこまで到達しません
**$(this.el).html(this.template(response));**
3つのステップでテンプレートを準備します
1. var template = $('#question_template').html();
console.log(template);
2. this.template = _.template(template);
3. $(this.el).html(this.template(response));