我有一个看起来像这样的Backbone模型
...
var Address = Backbone.Model.extend({
urlRoot: '/address/'
});
return { address: Address }
});
我有一个模板打印出表单中的地址。模板由在其“render”函数中传递地址id的视图呈现。通过类似'address /:id'的路线到达视图。
视图如下所示:
var AddressView = Backbone.View.extend({
el: $('#myclass'),
render: function(options) {
var that = this;
var addr = new A.address({id: options.aid});
addr.fetch({
reset: true,
success: function(address) {
var template = _.template(ATemplate, {address: address});
that.$el.html(template);
}
});
return this;
},
events: {
'submit .edit-address-form': 'editAddress'
},
editAddress: function(ev) {
//serializeObject creates JSON object from form data
var addressDetails = $(ev.currentTarget).serializeObject();
addr.save(addressDetails, function(addr) {
R.router.navigate('', {trigger: true});
});
return false;
}
});
return {
addressView: new AddressView()
};
});
有两个问题。第一个问题是'editAddress'函数永远不会被调用,即使类名是正确的并且按钮类型=是'submit'。
第二个问题是当我提交地址表格时,URL是乱码,在基本URL和/#/地址之间插入查询字符串,如
HTTP:/// ldmanclient /地址= 2500 +莫菲特+图书馆及安培;地址2 =大学+ +加州%2C +伯克利&安培;城市=伯克利&安培;邮政编码= 94720&安培; mailcode = 6000&安培;援助= 1#/地址/ 1
之前有没有人见过这种行为?我做错了什么?
答案 0 :(得分:0)
正如mu所说,在Backbone到达之前,表单是以标准方式提交的。尝试阻止提交操作:
editAddress: function(ev) {
ev.preventDefault();
// same code as above
}