7

変更したモデルをデータベース(前に設定)に保存したいのですが。保存が成功した場合は、別のページにリダイレクトします(たとえば、他のアクションである可能性があります)。

Model.saveには、2つのオプションのプロパティを含めることができます。1つ目はプロパティのハッシュで、2つ目はオプション(成功やエラーのコールバックなど)です。http://backbonejs.org/#Model-save

 somemodel.set({foo: 'bar'});
//lots of other logic and misc steps the user has to do
 somemodel.save(); //on success should go here

属性はすでに設定されているので、コールバックだけが必要です。

過去に私はしました:

somemodel.save(somemodel.toJSON(), { 
    success: function() { 
        //other stuff
    }
);

または、値をsaveメソッドに再度渡します

somemodel.save(
    { foo: this.$('input').val()}, 
    { success: function(){}
);

これをクリーンアップする方法を探しています。ドキュメントの状態。新しいプロパティがある場合、モデルは状態の変更を実行します。しかし、とにかくユーザーをリダイレクトしたいと思います(新しいコンテンツまたは古い/変更されていないものを保存します)。

これは存在しません:

somemodel.on('success', function(){}); 

これは、検証専用です。

if(somemodel.save()) { //action }

また、「同期」は間違ったイベントです(破棄にも機能するため)

何か助けはありますか?

4

2 に答える 2

12
somemodel.save(
    {}, // or null
    { 
            success: function(){}
    }
);

既存のキーを変更せずに、特定のコールバックでモデルを保存できます。

そしてフィドルhttp://jsfiddle.net/h5ncaayu/

オプションとして成功コールバックを渡さないようにするには、次のことができます。

  • によって返される promise を使用しますsave

    somemodel.save().then(...youcallback...)
    
  • またはイベントを使用します:

    somemodel.on('sync', ...youcallback...);
    somemodel.save();
    
于 2012-07-31T13:15:05.167 に答える
3

Backbone.Model には、変更された属性のハッシュを返す「changedAttributes」という非常に便利なメソッドがあり、それを渡して保存することができます。そう...

model.save(
   model.changedAttributes(),
   {
       success : _.bind(function() {...},this), //_.bind() will give scope to current "this"
       error : _.bind(function() {...},this);
   }
);

綺麗で清楚…

于 2012-07-31T17:46:48.163 に答える