ビューでモデルの becomeInvalid イベントと becomeError イベントをサブスクライブして、エラー状態を設定できるようにしたいと考えています。2 つの方法が考えられますが、どちらにも欠点があります。
私が考えることができる最初の方法は、オブザーバーを使用して、ビューに独自の becomeInvalid および becomeError フックを作成することです。
becameInvalid: function() {
var isValid = this.get('controller.model.isValid');
if (Ember.isNone(isValid) || isValid) {
return;
}
console.log('becameInvalid');
}.observes('controller.model.isValid')
becameError: function() {
var isError = this.get('controller.model.isError');
if (Ember.isNone(isError) || !isError) {
return;
}
console.log('becameError');
}.observes('controller.model.isError')
これは機能しますが、多くのボイラープレート コードを使用します。私が考えることができる 2 番目の方法は、モデルが読み込まれた後にイベントにハンドラーを追加することです。
didLoad: function() {
var isLoaded = this.get('controller.model.isLoaded');
if (Ember.isNone(isLoaded) || !isLoaded) {
return;
}
var model = this.get('controller.model');
model.on('becameInvalid', function() {
console.log('becameInvalid');
});
model.on('becameError', function() {
console.log('becameError');
});
}.observes('controller.model.isLoaded')
このアプローチの問題点は、まだいくつかのボイラープレート コードが必要なことと (間違っていたら訂正してください)、ビューが削除されたときにイベント ハンドラーが自動的にクリーンアップされないことです。
私がやりたいことは、フレームワークによって自動的にクリーンアップされるイベントのオブザーバー プロトコルに似たものです。例えば:
becameInvalid: function() {
console.log('becameInvalid');
}.eventHandler('controller.model.becameInvalid')
becameError: function() {
console.log('becameError');
}.eventHandler('controller.model.becameError')
このようなものは存在しますか?