LoginSignup
19
20

More than 5 years have passed since last update.

jQueryでやるView Component

Last updated at Posted at 2016-07-11

わざわざ語るようなことではないかもしれないが、あんまりそういうの話題になかったのでメモ程度に。

受託なんかで気軽にライブラリを増やせない環境で、View Componentとして振る舞いや状態を切り出したいような場合に


class SomeViewComponent {
  constructor($target) {
    this.$target = $target;
  }

  setValue(str) {
    this.$target.text(str);
  }

  setState(disabled) {
    if (disabled) {
      this.$target.addClass("is-disable");
    } else {
      this.$target.removeClass("is-disable");
    }
  }

  onClick() {
    return new Promise(resolve => {
      this.$target.on("click", ev => resolve(ev));
    });
  }
}

みたいな、必要なDOMインスタンスを食わせて外から値や状態を指定するようなclassを作るようにしている。

使う側は

class SomeHandler {
  constructor(component) {
    this.component = component;
    this.component.onClick().then(ev => this.onComponentClick(ev));
  }

  onComponentClick(ev) {
    console.log("clicked");
  }

  request() {
    fetch("/path/to/json")
      .then(res => res.json())
      .then(data => this.registerData(data));
  }

  registerData(data) {
    // JSONで { "record": "hoge" } みたいなのがくるとして
    this.component.setValue(data.record);
    this.component.setState(data.record === "");
  }
}

みたいな感じ。

jQueryでもView Componentとして定義して責務を上手く扱いましょうという話でした。


※ちなみにjQueryじゃなくても良いです

19
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20