テンプレートは次のようになります。変数をバックボーンテンプレートに渡すとき、そのテンプレートでどのように参照するのですか?
<div>
<H5>Status for your request</H5>
<table>
<tbody>
<tr>
<th>RequestId</th>
<th><%=id%></th>
</tr>
<tr>
<th>Email</th>
<th><%=emailId%></th>
</tr>
<tr>
<th>Status</th>
<th><%=status%></th>
</tr>
</tbody>
</table>
</div>
これは、ページをレンダリングするビューのJavascriptです。
window.StatusView = Backbone.View.extend({
initialize:function() {
console.log('Initializing Status View');
this.template = _.template(tpl.get('status'));
},
render:function (eventName) {
$(this.el).html(this.template());
return this;
},
events: { "click button#status-form-submit" : "getStatus" },
getStatus:function(){
var requestId = $('input[name=requestId]').val();
requestId= $.trim(requestId);
var request = requests.get(requestId);
var statusTemplate = _.template(tpl.get('status-display'));
var statusHtml = statusTemplate(request);
$('#results-span').html(statusHtml);
}
});
入力のクリックは、requestIdが読み取られ、ステータスがID「結果スパン」を有するHTML要素に付加されます。
エラーは、html-templateの値を変数値に置き換えたときに発生します。
var statusTemplate = _.template(tpl.get('status-display'));
var statusHtml = statusTemplate(request);
レンダリングが失敗し、次のエラーが発生します。
Uncaught ReferenceError: emailId is not defined
(anonymous function)
_.templateunderscore-1.3.1.js:931
window.StatusView.Backbone.View.extend.getStatusstatus.js:34
jQuery.event.dispatchjquery.js:3242
jQuery.event.add.elemData.handle.eventHandle
は、ポインタをありがとうございました。 Backboneモデルを渡す代わりに、モデルから作成された純粋なjavascriptオブジェクトを渡しました。 'var data = {id:request.get( 'id')、emailId:request.get( 'emailId')、ステータス:request.get( 'status')};'。今テンプレートはそれをうまく表現しています。 BackBoneモデルと純粋なJSオブジェクトの違いは何ですか? – Nambi
@ Nambi:ビューは通常、モデルやコレクションをBackboneに表示し、そのモデルやコレクションは['this.model'や' this.collection']にあります(http://documentcloud.github.com/backbone/#View-constructor) 。次に、['toJSON'](http://documentcloud.github.com/backbone/#Model-toJSON)メソッドを使用して、モデル/コレクションを単純なJavaScriptデータ構造に変換します。 'request'がバックボーンモデルの場合、' var data = {...} 'は' toJSON'にすべての 'request'属性が含まれる点を除いて' var data = request.toJSON() 'と同じです。テンプレートは気にしません。ちょうど正しいキーを持つオブジェクトが必要です。 –