0

当在from上侦听change事件时,知道何时应该再次将自身重新呈现给用户配置文件。ProfileViewEditView

如果用户只是从 中单击“更新个人资料”EditView但没有更改任何属性(即他不想编辑他的个人资料)PUT仍然会发送但没有change事件,因此用户被卡在编辑页面上,直到一个属性被改变了..

为什么如果没有更改任何属性,骨干网仍会将其发送到服务器?

4

2 回答 2

3

在我看来,您的应用程序中的逻辑有缺陷。IE。如果他不想编辑他的个人资料,为什么用户会单击“更新个人资料”?在这种情况下,您可能需要另一种导航方法。如果您告诉 Backbone 保存模型,那么它必须将数据发送到服务器来执行此操作,因为它不知道您不需要它(您可能正在记录保存尝试或从服务器返回更新的值)。也许看看利用 changedAttributes 方法来决定是否需要触发保存。

于 2012-07-16T22:47:38.637 回答
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();
}
于 2012-07-18T14:39:52.883 回答