我正在我的mvc项目中使用bootstrap。我在使用bootstrap popover小部件时遇到了问题。我已经为popover小部件创建了一个自定义的knockout绑定,代码如下:
查看fiddle
ko.bindingHandlers.popover = {
init: function (element, valuesAccessor, allBindingsAccessor, viewModel, bindingContext) {
var options = ko.utils.unwrapObservable(valuesAccessor() || {});
options.html = true;
options.content = '<small class="text-info">' + 'Variable text goes here.Variable text goes here.Variable text goes here.Variable text goes here.Variable text goes here. ' + '</small>';
$(element).popover(options);
},
update: function (element, valuesAccessor, allBindingsAccessor, viewModel, bindingContext) {
var extraOptions = allBindingsAccessor().popoverOptions;
$(element).popover(extraOptions.observable() ? "show" : "hide");
$(element).siblings('.popover').css({ width: '150px' });
//IF YOU UN-COMMENT BELOW 2 LINES THAN EVERY THINGS WORKS FINE
//if(extraOptions.observable())
//$(element).popover('show');
}
};
function vm() {
var self = this;
self.isVisible = ko.observable(false);
self.open = function () {
self.isVisible(!self.isVisible());
};
}
ko.applyBindings(new vm());
我希望能在任何具有可变文本消息和可变大小的元素上初始化弹出窗口。一切都正常,但是当我更改弹出窗口的默认宽度时,第一次打开时其位置不正确(请在fiddle中检查行为)。
fiddle中有一些代码行,如果您取消注释,则可以解决此问题。但我觉得这是一种hacky方法,我想找到更好的处理方式是否存在?