Skip to content

Instantly share code, notes, and snippets.

@smailliwcs
Created September 22, 2020 15:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smailliwcs/28749db3f8c220b5d547b0af0e17ba5a to your computer and use it in GitHub Desktop.
Save smailliwcs/28749db3f8c220b5d547b0af0e17ba5a to your computer and use it in GitHub Desktop.
Knockout binding handler: tooltip
<script type="text/javascript">
ko.bindingHandlers.tooltip = {
normalize: function (valueAccessor) {
var value = ko.unwrap(valueAccessor());
if (typeof value === "object" && "data" in value) {
return value;
} else {
return { data: value };
}
},
getOptions: function (element, valueAccessor) {
var value = ko.bindingHandlers.tooltip.normalize(valueAccessor);
return $.extend({}, ko.unwrap(value.options), {
items: element,
content: ko.unwrap(value.data)
});
},
init: function (element, valueAccessor) {
var options = ko.bindingHandlers.tooltip.getOptions(element, valueAccessor);
$(element).tooltip(options);
},
update: function (element, valueAccessor) {
var options = ko.bindingHandlers.tooltip.getOptions(element, valueAccessor);
$(element).tooltip("option", options);
}
};
</script>
<div data-bind="tooltip: 'Hypertext Markup Language'">HTML</div>
<div data-bind="
tooltip: {
data: now().toLocaleTimeString(),
options: { track: true }
}">
Time
</div>
<script type="text/javascript">
function ViewModel() {
var self = this;
self.now = ko.observable(new Date());
setInterval(function () {
self.now(new Date());
}, 1000);
}
ko.applyBindings(new ViewModel());
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment