【发布时间】:2014-11-24 16:02:24
【问题描述】:
如何销毁使用选择器选项创建的 Bootstrap 弹出框?例如
$e.popover({
selector: 'mark',
trigger: 'hover',
container: "body",
});
如果您随后调用 $e.popover('destroy'),则会收到错误消息。
我注意到popover('destroy')调用的Plugin函数如下:
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'],但我并不清楚这应该如何发生。
一种选择是创建一个字符串s = 'destroy',然后将selector 属性添加到该字符串,但显然这不是预期的设计。
或者,也可以致电$e.data('bs.popover').mark.destroy(),但我再次不确定这是预期的设计,并且在我能找到的任何地方都没有记录。
【问题讨论】:
-
您使用的是什么版本的 Bootstrap?即使使用您的代码,我仍然会得到
data应该是什么(在您的示例中data.mark是什么)。 -
@Matt 这是 Bootstrap 3.3.1
-
啊,我正在研究旧版本。似乎是 Bootstrap 中的一个明显错误(在此提交中引入;github.com/twbs/bootstrap/commit/…)
-
感谢@Matt - 很好的发现。 :) 随时向 twbs 提交错误报告并参考此(或让我知道,我可以提交)。干杯
-
Brian:我评论过github.com/twbs/bootstrap/issues/15168... 看来这不是一个经过深思熟虑的改变,而且破坏了很多东西!
标签: javascript twitter-bootstrap bootstrap-popover