私は Backbone を初めて使用し、Todos の例から作業を開始しました。その後、Ruby on Rails Web アプリを使用し、永続性のために localstorage ではなく REST API を関連付ける、Todos ではなく Contacts 用の新しいバージョンの例を作成しました。変更を行った後、Backbone アプリで Rails アプリを正常に更新できますが、Backbone ビューを取得して、Backbone アプリが Rails REST API から受け取るデータをレンダリングすることはできません。デバッガーでコードをステップ実行したところ、次のことがわかります。
- 関数を呼び出してビューを設定するイベントは、モデルのコレクションにバインドされています
- モデルデータを取得すると、サーバーからのデータでコレクションが更新されます
- ただし、コレクションにバインドされたリセット イベントは発生しません。
リセットイベントが発生しない原因を誰か教えてもらえますか? 私のコードは以下の通りです:
コレクション:
var ContactsList = Backbone.Collection.extend({
model: Contact,
url: 'http://localhost:3000/contacts.json',
});
var Contacts = new ContactsList;
AppView:
var AppView = Backbone.View.extend({
el: $("#contactapp"),
events: {
"keypress #new-contact": "createOnEnter"
},
initialize: function() {
this.input = this.$("#new-contact");
Contacts.bind('add', this.addOne, this);
Contacts.bind('reset', this.addAll, this);
Contacts.bind('all', this.render, this);
Contacts.fetch();
},
addOne: function(contact) {
var view = new ContactView({model: contact});
this.$("#contact-list").append(view.render().el);
},
addAll: function() {
Contacts.each(this.addOne);
},
createOnEnter: function(e) {
if (e.keyCode != 13) return;
if (!this.input.val()) return;
Contacts.create({first_name: this.input.val()});
this.input.val('');
},
});
var App = new AppView;