3 つの状態を持つ Ember ビューを作成しようとしています。具体的には、「送信」から「保存中...」、「完了!」に遷移する送信ボタンです。この目標を達成するには多くの方法がありますが、くだらないコードを書かずにこれを達成するための「ベスト プラクティス」は、Ember の観点からはどうなるのだろうと考えていました。
現在、次のコードがあります。
UiControls.SubmitButton = Ember.View.extend({
template: function() {
var template = '{{#if view.isNotStarted}}Submit{{/if}}';
template += '{{#if view.isStarted}} <i class="icon-spinner icon-spin"></i>Saving...{{/if}}';
template += '{{#if view.isFinished}} <i class="icon-check-sign"></i>Finished!{{/if}}'
return Ember.Handlebars.compile(template);
}.property(),
isNotStarted: true,
isStarted: null,
isFinished: null,
classNames: ['btn', 'btn-green'],
isDisabled: false,
click: function(){
if (!this.get('disabled')){
this.set('isNotStarted', false);
this.set('isStarted', true);
this.set('isFinished', false);
this.timer();
}
},
/* Simulates a server call */
timer: function(){
(function(self){
setTimeout(function(){
self.set('isStarted', false);
self.set('isFinished', true);
}, 500);
})(this);
}
});
私にとってこれは本当に醜いです。ハンドルバーの意図的に制限された条件付き構文を操作するために、イベントに基づいて個々のブール値を設定しています。
私が欲しいのは、Ember StateManager プロパティのようなものを受け入れるハンドルバー構造です (Handlebars 構文では不可能です)。または、少なくとも、StateManager から計算されたプロパティに基づいてテンプレートを変更したいと考えています (これも不可能です)。だから私の質問は、コードの重複を防ぐために上記のコードを記述して、多くの小さなブールフラグ操作を介して手動で状態遷移を処理するより良い方法はありますか?