Skip to content

調査クエスト: GomlNode#remove() がおかしい #569

@ahy4

Description

@ahy4

と思う。気になったので少しだけ検証はした。

実際に消えてほしいNodeとは別のものが消える。removeChildも同様。

メモ: https://grimoirejs.slack.com/archives/C04CQQR6D/p1524666122000852

定義:

  public remove(): void {
    this.children.forEach((c) => {
      c.remove();
    });
    this._sendMessageForced("$$dispose");
    this.removeAllListeners();
    delete GrimoireInterface.nodeDictionary[this.id];
    if (this._parent) {
      this._parent.detachChild(this);
    } else {
      this.setMounted(false);
      if (this.element.parentNode) {
        this.element.parentNode.removeChild(this.element);
      }
    }
    this._deleted = true;
  }
  public removeChild(child: GomlNode): void {
    const node = this.detachChild(child);
    if (node) {
      node.remove();
    }
  }

背景

http://jsdo.it/ahyahya4/eT05

これをつくったけど、消えるべきでないコインが消えてびっくりした。

registerComponetの$update内のthis.node.remove()が該当箇所で、代わりにscene.removeChild(this.node)も試したけど同じ挙動をした。

そもそも俺がremoveChildの使い方を間違えてるってことはある?

ほんじゃあどうするか

いいだしっぺの法則ありますか?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions