我需要在删除数据库条目并在服务器端创建另一个_id
的新模型后初始化新模型。浏览器使用新的id
重定向到网址,但没有获取新值,也没有刷新页面,只有在您导航到另一个页面然后导航回来之后,它才有效。
app.Details = Backbone.Model.extend({
idAttribute: '_id',
defaults: {
success: false,
errors: [],
errfor: {},
name: ''
},
url: function() {
return '/admin/account-groups/'+ app.mainView.model.id +'/';
},
parse: function(response) {
if (response.accountGroup) {
app.mainView.model.set(response.accountGroup);
delete response.accountGroup;
}
return response;
}
});
app.DetailsView = Backbone.View.extend({
el: '#details',
events: {
'click .btn-update': function(e) {
this.update(e);
// try to initialize new view here recursively...
this.initialize(e);
this.syncUp(e);
this.render(e);
}
},
template: Handlebars.compile( $('#tmpl-details').html() ),
initialize: function() {
this.model = new app.Details();
this.syncUp();
this.listenTo(app.mainView.model, 'change', this.syncUp);
this.listenTo(this.model, 'sync', this.render);
this.render();
},
syncUp: function() {
this.model.set({
_id: app.mainView.model.id,
name: app.mainView.model.get('name')
});
},
render: function() {
this.$el.html(this.template( this.model.attributes ));
for (var key in this.model.attributes) {
if (this.model.attributes.hasOwnProperty(key)) {
this.$el.find('[name="'+ key +'"]').val(this.model.attributes[key]);
}
}
},
update: function() {
this.model.save({
name: this.$el.find('[name="name"]').val()
});
this.delete();
},
delete: function() {
this.model.destroy({
success: function(model, response) {
if (response.success) {
location.href = '/admin/account-groups/' + app.mainView.model.get('name') + '/';
}
else {
app.deleteView.model.set(response);
}
}
});
}
});
因为_id
是不可变的,所以必须应用2种方法,如何与客户端同步?
如果有人熟悉Backbone算法的示例或全局模式来处理app.put
和app.delete
,那将非常有用,因为我不确定触发递归主干是否正确某些事件的功能。
修改 此问题不是重定向返回双重路由的上一个问题的重复。这里的问题是关于模型的非初始化(不在渲染中的字段中获取值)