多くのチュートリアルを読み、.net で検索を行いましたが、それでも Backbone.js に問題があります。これは私の簡単なシナリオです:
Rails アプリケーションは、オブジェクトの JSON コレクションを使用して GET 要求に応答します。DOM の準備ができたら、バックボーン コレクションを使用してテーブル行のリストを動的に作成したいと考えています。これは私を混乱させているコードです:
HTML 部分:
<script type="text/template" id="tmplt-Page">
<td>{{=title}}</td>
<td>{{=description}}</td>
</script>
バックボーンのスクリプト:
$(function(){
var Page = Backbone.Model.extend({});
var Pages = Backbone.Collection.extend({
model: Page,
url: '/pages'
});
var pages = new Pages([
{title: 'ProvA1', description: ''},
{title: 'ProvA2', description: ''}
]);
var PageView = Backbone.View.extend({
tagName: 'tr',
template: _.template($('#tmplt-Page').html()),
render: function() {
this.$el.append(this.template(this.model.toJSON()));
return this;
}
});
var AppView = Backbone.View.extend({
el: $("#results"),
initialize: function () {
_.bindAll(this, 'render');
pages.on('reset', this.render)
},
render: function() {
this.$el.empty();
pages.each( function( page ) {
var view = new PageView({
model : page
});
this.$el.append(view.render().el);
});
return this;
}
});
var appview = new AppView;
});
画面には何もレンダリングされません。
2つの問題があるようです:
1) fetch() は非同期であるため、コードは ajax ラウンドトリップが終了する前に実行されます。
2) コレクションにいくつかのオブジェクトを手動でロードした場合、このコード「this.template(this.model.toJSON())」は jSON 属性を置き換えません。
編集 :
口ひげタグを使用するために、私はすべての前にこのコードを書きました: