我正在尝试编写具有三种状态的 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 的计算属性更改我的模板(同样,不可能)。所以我的问题是,有没有更好的方法来编写上述代码,以防止通过大量的小布尔标志操作手动处理代码重复处理状态转换?