【发布时间】:2014-01-01 09:10:15
【问题描述】:
我在这里找到了一些关于使用带有自定义敲除绑定处理程序的 Bootstrap 工具提示的其他问题和资源。但是,我还没有找到一个有凝聚力的解决方案,它 1) 涉及使用动态剔除模板 2) 当绑定到的数据发生变化时,工具提示可以更改。
我也离开了 GitHub 上的 knockout-bootstrap,但其中的工具提示标题只呈现了一次,
我创建了一个新的JSFiddle,其中包含以下基于先前JSFiddle 的新动态工具提示。
新的 DynamicTooltip 数据绑定器如下所示:
ko.renderTemplateHtml = function (templateId, data) {
var node = $("<div />")[0];
ko.renderTemplate(templateId, data, {}, node);
return $(node).html();
};
ko.bindingHandlers.tooltip = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var local = ko.utils.unwrapObservable(valueAccessor()),
options = {};
ko.utils.extend(options, ko.bindingHandlers.tooltip.options);
ko.utils.extend(options, local);
var tmplId = options.kotemplate;
ko.utils.extend(options, {
title: ko.renderTemplateHtml(tmplId, viewModel)
});
$(element).tooltip(options);
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).tooltip("destroy");
});
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var local = ko.utils.unwrapObservable(valueAccessor()),
options = {};
ko.utils.extend(options, ko.bindingHandlers.tooltip.options);
ko.utils.extend(options, local);
var tmplId = options.kotemplate;
var forceRefresh = options.forceRefresh;
var newdata = ko.renderTemplateHtml(tmplId, viewModel);
$(element).data('bs.tooltip').options.title = newdata
},
options: {
placement: "top",
trigger: "hover",
html: true
}};
它不完整,因为我通过在视图模型上传入一个虚拟数据绑定属性手动触发更新调用,在这种情况下,它被称为 renderTooltip():
<a data-bind="tooltip: { title: firstName, placement: 'bottom', kotemplate: 'tile-tooltip-template', forceRefresh: renderTooltip() }">Hover on me</a>
我希望能够在数据更改时触发工具提示以自行刷新。
我在想我应该使用 createChildContext() 和 controlsDescendantBindings,但我不太确定。
有什么想法吗?我会继续更新这个,因为动态引导工具提示似乎是一个常见的想法。
【问题讨论】:
标签: javascript jquery twitter-bootstrap knockout.js