Я пытаюсь написать представление 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 (опять же, это невозможно). Поэтому мой вопрос заключается в том, есть ли лучший способ написать вышеприведенный код, чтобы предотвратить перекодирование операций с копированием кода вручную через множество небольших логических манипуляций с флагом?