@paperbits/core
Version:
Paperbits core components.
24 lines (20 loc) • 1.05 kB
text/typescript
import * as ko from "knockout";
import { MarkdownBehavior } from "@paperbits/common/behaviors/behavior.markdown";
ko.bindingHandlers["markdown"] = {
update: (element: HTMLElement, valueAccessor: () => string): void => {
const markdown = ko.unwrap(valueAccessor());
// Clean up any previous behavior instance before attaching a new one
const existingHandle = ko.utils.domData.get(element, "markdownBehaviorHandle");
if (existingHandle && existingHandle.dispose) {
existingHandle.dispose();
}
const behaviorHandle = MarkdownBehavior.attach(element, markdown);
ko.utils.domData.set(element, "markdownBehaviorHandle", behaviorHandle); // Store the handle for potential cleanup
// Ensure dispose is called when the element is removed
ko.utils.domNodeDisposal.addDisposeCallback(element, () => {
if (behaviorHandle && behaviorHandle.detach) {
behaviorHandle.detach();
}
});
}
};