2

セレクタ オプションで作成された Bootstrap ポップオーバーをどのように破棄しますか? 例えば

$e.popover({
  selector: 'mark',
  trigger: 'hover',
  container: "body",
});

その後、呼び出す$e.popover('destroy')と、エラーが発生します。

によって呼び出されるPlugin関数popover('destroy')は次のとおりです。

 function Plugin(option) {
    return this.each(function () {
      var $this    = $(this)
      var data     = $this.data('bs.popover')
      var options  = typeof option == 'object' && option
      var selector = options && options.selector

      if (!data && option == 'destroy') return
      if (selector) {
        if (!data) $this.data('bs.popover', (data = {}))
        if (!data[selector]) data[selector] = new Popover(this, options)
      } else {
        if (!data) $this.data('bs.popover',(data = new Popover(this, options)))
      }
      if (typeof option == 'string') data[option]() /// <<-- THIS ALWAYS FAILS
    })
  }

上記の行 (明確にマークされている)を呼び出すと、$e.popover('destroy')を呼び出しているため常に失敗しますがdata['destroy']、データは のようなオブジェクトになります{mark: Popover}

明らかに呼び出してdata['mark']['destroy']いるはずですが、これがどのように発生するのかはすぐにはわかりません。

1 つのオプションは、文字列を作成してからプロパティを文字列s = 'destroy'に追加するselectorことですが、それが意図した設計ではないことは明らかです。

または、 を呼び出すこともできます$e.data('bs.popover').mark.destroy()が、それが意図した設計であるかどうかはわかりません。また、どこにも文書化されていません。

これがサンプルのjsFiddleです

4

1 に答える 1