3

エンバー オブジェクトがあり、それがダーティな状態かどうかを知りたいです。

var App.Post = Ember.Object.create({
   title: "Test",
   isDirty: false
});
App.Post.set("title", "Test2");
App.Post.get("isDirty") // Should === true

とりあえず、オブジェクトのセットをオーバーロードしてみました

App.Post = Ember.Object.create({
   set: function(path, value) {
       this._super(path, value);
       this._super("isDirty", true);
   }
})

myObject.set を直接呼び出している場合は機能しますが、embers バインディングを使用している場合はその set 関数を使用していないようです。ログを追加しましたが、このメソッドは通常の emberjs バインディング ワークフローでは呼び出されません。

私が試したもう 1 つのことは、オブザーバーを追加してダーティ フラグを切り替えることです。

App.Post = Ember.Object.create({
   hasBeenModified: function() {
      this.set("isDirty", true);
   }.observes("title")
})

理由は不明ですが、モデル レベルで監視を使用すると、バインディングが UI で機能しなくなります。

4

1 に答える 1

0

setUnknownProperty もオーバーライドする必要があると思います。UI は を使用してEmber.set(object, key, value)います。実装を見ると

https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/property_set.js#L60 セッターを呼び出しませんが、setUnknownProperty存在する場合は呼び出します。

実際には、

https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/property_set.js#L52

App.Postクラスでフィールドを事前定義している場合、セッターを呼び出すようです。

于 2013-12-31T17:38:22.160 に答える