mvc プロジェクトでブートストラップを使用しています。ブートストラップ ポップオーバー ウィジェットに問題があります。ポップオーバー ウィジェット用のカスタム ノックアウト バインディングを作成しました。コードは次のとおりです。
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());
可変テキスト メッセージと可変サイズの要素でポップオーバーを初期化したいと考えています。すべてがうまくいきますが、ポップオーバーのデフォルトの幅を最初に開いたときよりも変更すると、その位置が正しくありません(フィドルで動作を確認してください)。
フィドルには、この問題よりもコメントを外すと解決するコード行がありました。しかし、私はそれがハッキーなアプローチだと感じています。