0

からのchangeイベントをリッスンするときに、いつそれ自体をユーザープロファイルに再レンダリングする必要があるかを確認します。ProfileViewEditView

ユーザーが[プロファイルの更新]をクリックしたEditViewが、属性を変更していない場合(つまり、プロファイルを編集したくない場合)、aPUTは送信されますが、changeイベントがないため、ユーザーは編集ページでスタックします。属性が変更されました。

属性が変更されていない場合でも、バックボーンがそれをサーバーに送信するのはなぜですか?

4

2 に答える 2

3

アプリのロジックに欠陥があるように思えます。すなわち。プロファイルを編集したくない場合、ユーザーはなぜ [プロファイルの更新] をクリックするのでしょうか? その場合、別のナビゲーション方法が必要になる場合があります。Backbone にモデルを保存するように指示した場合、Backbone はデータをサーバーに送信して、その必要がないことを認識していないため、サーバーにデータを送信する必要があります (保存の試行を記録したり、サーバーから更新された値を返したりする可能性があります)。 )。たぶん、変更された属性メソッドを利用して、保存をトリガーする必要があるかどうかを判断してください。

于 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 に答える