私は自分のページに「サーバーからロードされた状態に戻ったすべての変更を元に戻す」ボタンを持っています。backbone.jsモデルの変更をロールバックする方法は?
私はBackbonejsモデルの初期状態を保存し、現在の(変更された)状態を初期状態に戻す。
これを達成する最も良い方法は何ですか?
はあなたに私がその編集前の状態にモデルを戻すための単一のメソッド呼び出しがあると信じていけない私は自分のページに「サーバーからロードされた状態に戻ったすべての変更を元に戻す」ボタンを持っています。backbone.jsモデルの変更をロールバックする方法は?
私はBackbonejsモデルの初期状態を保存し、現在の(変更された)状態を初期状態に戻す。
これを達成する最も良い方法は何ですか?
はあなたに私がその編集前の状態にモデルを戻すための単一のメソッド呼び出しがあると信じていけないFWIW私は、特に念頭に置いて、「キャンセル」ボタンのアイデアを、これを自動的に処理するためのプラグインを書きました新しい値(何も変更されていない場合はfalse
)。つまり、あなたのプロトタイプでcancelChanges
方法書くためにそれらを組み合わせることができ:NYTimesのbackbone.trackitを見てみましょう
var RollbackEnabledModel = Backbone.Model.extend({
initialize: function() {
this._initAttributes = _.clone(this.attributes);
},
parse: function(data) {
this._initAttributes = _.clone(data);
return data;
},
rollback: function() {
this.set(this._initAttributes);
}
});
ありがとうございました..しかし、未編集の値を個別にmodel.previous(属性)を介して一括しmodel.previousAttributesを経由してご利用いただけます。 model.changedAttributes()
戻って変更されたすべての属性しばらく、しかしで、http://github.com/derickbailey/backbone.memento
model.previousAttributes()
戻り、以前の属性のすべて: -
を私が思い付いたものです。 model.changedAttributes()
とmodel.previousAttributes()
のような最新の変更だけでなく、モデルの複数の変更を追跡します。 READMEから:
var model = new Backbone.Model({id:1, artist:'Samuel Beckett', 'work':'Molloy'});
model.startTracking();
model.set('work', 'Malone Dies');
console.log(model.unsavedAttributes()); // >> Object {work: "Malone Dies"}
model.set('period', 'Modernism');
console.log(model.unsavedAttributes()); // >> Object {work: "Malone Dies", period: "Modernism"}
model.save({}, {
success: function() {
console.log(model.unsavedAttributes()); // >> false
}
});
また、ライブラリには、最後の保存以降 元の状態に
resetAttributes
に機能を追加するunsavedChanges
の 状態が更新されたイベントをトリガし、に選ぶためのオプションがあります 新しいコンテキストにルーティングする前に確認を促すメッセージ。
:ここ
var MyModel = Backbone.Model.extend({
cancelChanges: function() {
var changed = this.changedAttributes();
if(!changed)
return;
var keys = _.keys(changed);
var prev = _.pick(model.previousAttributes(), keys);
this.set(prev, {silent: true}); // "silent" is optional; prevents change event
},
});
ありがとうございます。この文章に誤字がありますか? "modelbindingファイルをbackbone.jsファイルの後ろに含めてください。"、ここでmodelbindingはmementoを読み込むべきですか? – archmage
おっと!はい、コピー&ペーストエラー:P –
backbone.mementoはバックボーン1.1でもまだ使えますか?私は最後のコミットが2012年に行われていることを確認します。 – Roberto