シナリオ
私はバックボーンアプリに取り組んでいます。現在起こっていることは、ユーザーがページの編集リンクをクリックすると、フォームが表示されるはずです。イベントではなくバックボーンルーターを使用してこれを実装しようとしています。イベントオブジェクトを使用すると、完全に正常に機能します。ルーターを使用するために、グローバル イベントを使用しています。
問題
問題は、ユーザーが編集リンクをクリックすると、コンソールに次のエラーが表示されることです
Uncaught TypeError: Object 10 has no method 'toJSON' views.js:57
このエラーは、views.js の 57 行目で、this.model.toJSON()
ルーター経由でモデルを渡していないのに使用しているためです。ルーターを介してモデルを渡す方法がわかりません
これが私のルーターです。注: 次のコードはすべて別のファイルにあります。
App.Router = Backbone.Router.extend({
routes: {
'contacts/:id/edit': 'editContact'
},
editContact: function (id) {
console.log('yahhhhh');
vent.trigger('contact:edit', id);
}
});
上記のルーターでは、関数内でイベントをトリガーしていeditContact
ます。次に、次の関数で上記のイベントをリッスンしていinitialize
ます。
App.Views.App = Backbone.View.extend({
initialize: function () {
vent.on('contact:edit', this.editContact, this);
},
editContact: function (contact) {
var editContactView = new App.Views.EditContact({ model: contact });
$('#editContact').html(editContactView.render().el);
}
});
関数で聞いた後event
、initialize
関数を呼び出しており、キーワードを使用してeditContact
渡しています。関数内で、次のビューのインスタンスを作成し、表示する必要があるフォームをレンダリングしています。model
this
editContact
EditContact
App.Views.EditContact = Backbone.View.extend({
template: template('editContactTemplate'),
render: function () {
var html = this.template(this.model.toJSON()); //<--- this is line 57
this.$el.html(html);
return this;
}
});
上記のすべてを実行した後、フォームが表示されず、上記のエラーが発生します。
質問
モデルをルーター経由で EditContact 内のレンダリング関数に渡して、機能を開始するにはどうすればよいですか?
アップデート
これが私のモデルです
App.Models.Contact = Backbone.Model.extend({
urlRoot : '/contacts'
});