express + Backbone.jsでクライアント側で動的にデータを描画する際のテンプレートの設定に苦労したのでメモしておきます。
謎なところは結構たくさんあるのだけど、 以下の点が最もわかり難かった箇所。
- node.jsが先にejsをレンダリングしようとするので、クライアントサイドのテンプレートは動的に読み込む
- underscore.jsのテンプレートへの引数の渡し方の作法が?
- render:の関数でthis.templateの引数は(ハッシュでも良いけど実用的には)モデルオブジェクトをtoJSON()して渡すと何となく上手く描画した
しかし、バージョン変わったらこの辺りの作法も変わりそう。。。。
$.get("./view/error_message.ejs", function(list_tmpl){
var DogView = Backbone.View.extend({
initialize: function () {
_.bindAll(this, "render");
this.render();
},
model: dog,
template:_.template(list_tmpl),
events: {
'click #search_button': 'onClick'
},
onClick: function(e){
alert($("#input_name").val())
},
render: function(){
this.$el.html(this.template(this.model.toJSON()));
}
});
var dog_view = new DogView({el: $("#container")});
});
underscore.jsのテンプレートは普通にこんな感じ。モデルでname要素が指定されています。
<label><%= name %></label>