Как вы уничтожаете Popup popup, созданный с помощью опции селектора? напримерУничтожить Bootstrap Popover с опцией выбора
$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']
, но мне не сразу понятно, как это должно произойти.
Один из вариантов заключается в создании строки s = 'destroy'
, а затем добавьте свойство selector
к строке, но должно быть очевидно, что это не предполагаемый дизайн.
В качестве альтернативы можно было бы позвонить $e.data('bs.popover').mark.destroy()
, но опять же я не уверен, что это намеченный дизайн, и он не документирован нигде, где я мог бы найти.
Вот sample jsFiddle
Какую версию Bootstrap вы используете? Даже когда вы используете свой код, я все равно получаю 'данные', что это должно быть (что такое' data.mark' в ваших примерах). – Matt
@Matt It's Bootstrap 3.3.1 –
А, я работал над более старой версией. Похоже на вопиющую ошибку в Bootstrap (введено в этой фиксации: https://github.com/twbs/bootstrap/commit/1b3237629a316af41945e20837cf3a332798b264) – Matt