【发布时间】:2013-02-03 11:07:48
【问题描述】:
场景
我正在开发主干应用程序。现在发生的事情是当用户单击页面上的编辑链接时,它应该显示一个表单。我正在尝试使用骨干路由器而不是事件来实现这一点。使用事件对象,它工作得非常好。要使用路由器,我使用的是全局事件。
问题
问题是当用户点击编辑链接时,它会在控制台中显示以下错误
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);
}
});
现在在上面听完initialize 函数中的event 之后,我正在调用editContact 函数,并且我还使用this 关键字传递model。在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'
});
【问题讨论】:
标签: javascript jquery backbone.js router backbone-routing