当在from上侦听change
事件时,知道何时应该再次将自身重新呈现给用户配置文件。ProfileView
EditView
如果用户只是从 中单击“更新个人资料”EditView
但没有更改任何属性(即他不想编辑他的个人资料),PUT
仍然会发送但没有change
事件,因此用户被卡在编辑页面上,直到一个属性被改变了..
为什么如果没有更改任何属性,骨干网仍会将其发送到服务器?
当在from上侦听change
事件时,知道何时应该再次将自身重新呈现给用户配置文件。ProfileView
EditView
如果用户只是从 中单击“更新个人资料”EditView
但没有更改任何属性(即他不想编辑他的个人资料),PUT
仍然会发送但没有change
事件,因此用户被卡在编辑页面上,直到一个属性被改变了..
为什么如果没有更改任何属性,骨干网仍会将其发送到服务器?
在我看来,您的应用程序中的逻辑有缺陷。IE。如果他不想编辑他的个人资料,为什么用户会单击“更新个人资料”?在这种情况下,您可能需要另一种导航方法。如果您告诉 Backbone 保存模型,那么它必须将数据发送到服务器来执行此操作,因为它不知道您不需要它(您可能正在记录保存尝试或从服务器返回更新的值)。也许看看利用 changedAttributes 方法来决定是否需要触发保存。
回答您的问题,您可以检查模型是否更改,并且仅在更改时调用保存其他方式直接调用重定向。
首先,检查这个基本示例以了解“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();
}