передать функцию стимулу

Я использовал стимулы для своего последнего проекта, и мне нравится, как я могу разбить код на небольшие части, которые можно использовать повторно.

Однако бывают случаи, когда создание нового контроллера и размещение его в качестве атрибута элемента немного громоздко, чтобы дать ему определенную функциональность.

Я не знаю, можно ли создать универсальный контроллер и передать ему функцию или обратный вызов для выполнения. Так что я все еще могу поддерживать сокращенный и чистый код

2 ответа

Одна из причин, по которой Stimulus великолепен, заключается в том, что это более или менее просто Javascript. Таким образом, у вас может быть метод на вашем универсальном контроллере Stimulus, который выглядит примерно так:

        execute() {
    let fname = this.element.getAttribute("data-method")
    // put this in a file somewhere else
    let myFunctionMap = {
      "scroll": () => {
        // just a plain fn
      },
      "otherThing": () => {}
    }
    return myFunctionMap[fname]()
  }

Это позволит вам иметь такую ​​кнопку в HTML:

            <button
        class="button button-primary"
        data-action="generic#execute"
        data-method="scroll">
        Do the thing
      </button>

Не так просто, как простой JS, но довольно близко.

Да, есть.

      // onconnect_controller.js
export default class extends Controller {
  static values = {
    callback: String,
  };

  connect() {
    window[this.callbackValue]();
  }
}
      <div data-controller="onconnect" data-onconnect-callback-value="executeMe"></div>
<script>
    function executeMe() {
        console.log("I was executed");
    }
</script>
Другие вопросы по тегам