2つのファイルを作成しました。1つはid='search_template'でスクリプトが定義されているHTML用で、もう1つは「ビュー」について言及したjavaScriptファイルです。
ビューのレンダリング機能で、HTMLファイルのスクリプトを次のように取得しています。
id ='search_template'
jQueryを使用してjQueryに渡す
.html()
文字列に変換してからアンダースコアに渡します
_.template(文字列)
ただし、アンダースコアはエラーをスローします
Uncaught TypeError:nullのメソッド'replace'を呼び出すことができません
jQueryはid='search_template'のスクリプトをStringに変換できないと思います。
SearchView = Backbone.View.extend({
initialize: function(){
_.bindAll(this, 'render');
},
render: function(){
var template = _.template($("#search_template").html());
$("body").html(template);
}
});
var search_view = new SearchView({ el: $("#search_container") });
search_view.render();
レンダリング関数からjQuery部分を削除し、.html()関数を使用せずにHTML文字列を明示的に渡してみました:-
render: function(){
var template = _.template("<label><%= search_label %></label>
<input type=\"text\" id=\"search_input\" />
<input type=\"button\" id=\"search_button\" value=\"Search\" />");
$("body").html(template);
}
そして、これは完全にうまく機能します。$( "search_template")を使用してjQueryを使用してスクリプトを取得しているのに、なぜ機能しないのですか。また、HTMLファイルとJavaScriptファイルの両方をマージすると機能します。これがHTMLファイルからの抜粋です:-
<script type="text/template" id="search_template">
<label>Search here : </label>
<input type="text" id="search_input" />
<input type="button" id="search_button" value="Search" />
</script>