Как привязать действие только при определенных условиях [Ember.js]

Я просто хочу знать, могу ли я каким-то образом достичь цели, указанной ниже.

<button class="{{unless publishable "button-disabled"}}" {{if publishable (action "publish")}}>Publish</button>

Конечно, это можно сделать методом действия. Я просто думаю, что это может сделать код более сухим, если это можно сделать в шаблоне.

ПРИМЕЧАНИЕ:

  • Я знаю, что приведенный выше код не будет работать. Это только для иллюстрации цели.
  • Я знаю, что для этого кнопка может использовать атрибут disabled. В моей оригинальной работе это на самом деле <a/>, у которого нет disabled. Мне нужно сохранить его как тег <a/> для целей css.
  • Я хочу, чтобы кнопка оставалась на странице независимо от того, отключена она или нет. Это своего рода соглашение о веб-странице. В этом случае пользователь будет знать, что он должен что-то пропустить, когда кнопка отключена.

person glenlivet1986    schedule 19.11.2015    source источник
comment
Не лучше ли скрыть кнопку, если ее нельзя опубликовать?   -  person Patsy Issa    schedule 19.11.2015
comment
@Kitler, я обновил свой вопрос. Надеюсь, это имеет смысл для вас.   -  person glenlivet1986    schedule 19.11.2015


Ответы (1)


Можно использовать {{mut}} в сочетании с {{action}} помощник:

<button {{action (if publishable 'publish' (action (mut undefProp)))}}>Publish</button>

Рабочая демонстрация.

Подробнее об этом конкретном варианте использования (mut преобразуется в функцию) можно прочитать в этом запись в блоге.

Объяснение:

Мы используем помощник действий, и действие, которое мы передаем этому помощнику, будет вычислено на основе условия if.

Если условие оценивается как истинное, мы возвращаем 'publish', что является просто именем действия.

Если условие оценивается как ложное, мы передаем действие, которое ничего не делает - мы используем что-то вроде обходного пути: (action (mut undefProp)).

person Daniel Kmak    schedule 19.11.2015
comment
ты. Не могли бы вы подробнее рассказать о (mut undefProp)? или вы можете дать мне ссылку, чтобы прочитать больше об этом? Я понятия не имею об этом, и я не могу найти ссылку на сайте ember. - person glenlivet1986; 19.11.2015
comment
так что здесь undefProp? - person glenlivet1986; 19.11.2015
comment
это просто означает неопределенное свойство в контроллере/компоненте? Само по себе оно не имеет особого значения в Ember.js, верно? - person glenlivet1986; 19.11.2015
comment
undefProp - это просто случайное неопределенное свойство. Да особого смысла в этом нет. Он просто используется для создания имитируемого действия, которое ничего не делает. - person Daniel Kmak; 19.11.2015
comment
Ваше здоровье! Теперь это супер ясно. Это своего рода обходной путь? Мне просто любопытно, почему он не может работать как {{action (if publishable 'publish')}}, что более читабельно. На ваш взгляд, возможно ли это усиление? - person glenlivet1986; 19.11.2015