© 2021 WebHive

Ember и mut разбираемся с хелперами

Неоднократно встречал в чужом коде на ember конструкции в которых присутствовал хелпер mut. Настало наконец время разобраться что же это наконец такое и как это использовать

Эта штука появилась в Ember начиная с версии 1.13. Несколько раз заглядывал в документацию, но ничего внятного там не находил. Лишь несколько слов, что этот хелпер делает объект mutable. Учитывая, что биндинги компонентов mutable сами по себе это вообще теряет какой-либо смысл.

Тем не менее давайте разбираться. Самым-то как раз интересным способом использования mut является его комбинация с action. В этом случае mut возвращает функцию которая которая присваивает значение поступающее в mut его аргументу.

Итак типовой код с mut выглядит как-то так:

1
{{ my-component updateAction=(action (mut model.value)) }}

В этом случае при вызове функции updateAction изнутри компонента this.get('updateAction')(1) значение, переданное в неё присвоится перременной model.value. В результате получим, что после этого model.value будет равно 1.

Зачем же такие сложности? А затем, что существенно уменьшается количество кода. Не нужно писать код за пределами компонента. Достаточно прередать имя переменной куда поместить результат.

Рассмотрим более жизненный пример. Здесь при изменении поля input значение переменной обновляется вообще без какого-либо кода в роуте/контроллере/компоненте.

Вывод

Использование mut позволяет существенно сократить код, сделать его более простым и читаемым. Основная проблема это неочевидное использование — просто глядя в код невозможно понять, что к чему. Однако разобравшись с вопросом и познав дзен все становится просто и понятно.

Источники

Комментарии