从change
收听ProfileView
上的EditView
事件时,知道它何时应该重新呈现给用户个人资料。
如果用户只需点击"更新个人资料"来自EditView
,但尚未更改任何属性(即,他不想编辑他的个人资料)仍然会发送PUT
,但有没有change
事件,因此在更改属性之前,用户将停留在编辑页面上。
为什么没有更改任何属性,骨干仍然会将其发送到服务器?
答案 0 :(得分:3)
听起来我的应用程序中的逻辑存在缺陷。即。如果用户不想编辑他的个人资料,为什么用户会点击“更新个人资料”?也许您需要在该实例中使用备用导航方法。如果您告诉Backbone保存模型,那么它必须将数据发送到服务器才能执行此操作,因为它不知道您不需要它(您可能正在记录保存尝试或从服务器返回更新的值)。也许看一下使用changedAttributes方法来决定是否需要触发保存。
答案 1 :(得分:2)
回答你的问题,你可以检查模型是否有变化,只有在更改时才调用另一种方式直接调用重定向。
首先,检查这个基本示例以了解“changedAttributes”:
var ProfileModel = Backbone.Model.extend({
defaults : {
title : 'hi',
name : 'there'
}
});
var profile = new ProfileModel();
//Nothing changed so it returns false
console.log( profile.changedAttributes({title: 'hi'}) );
//Title changed so it return a hash with it
console.log( profile.changedAttributes({title: 'hi2'}) );
现在想出你的代码,它必须做这样的事情:
var collectedProfile = {
firstName : this.$('.firstName').val(),
lastName : this.$('.lastName').val(),
};
if( model.changedAttributes( collectedProfile ) ){
//instead of listen for the changed listen directly the server response
model.save(collectedProfile, {success : this.handlerServerResponse })
}else{
//model did not changed do not needed to call the server
this.doRedirect();
}
//in your view:
handlerServerResponse : function(){
//server process completed so let's redirect
this.doRedirect();
}