设想
我正在开发骨干应用程序。现在发生的事情是当用户单击页面上的编辑链接时,它应该显示一个表单。我正在尝试使用骨干路由器而不是事件来实现这一点。使用事件对象,它工作得非常好。要使用路由器,我使用的是全局事件。
问题
问题是当用户单击编辑链接时,它会在控制台中显示以下错误
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
usingthis
关键字。在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'
});