WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit 3aad87e

Browse files
committed
Rewritten several binding handlers into behaviors.
1 parent 11befe1 commit 3aad87e

File tree

2 files changed

+5
-27
lines changed

2 files changed

+5
-27
lines changed

src/ko/behaviors/knockoutBehavior.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import * as ko from "knockout";
33
export function registerKnockoutBehavior(behaviorName: string, BehaviorClass) {
44
ko.bindingHandlers[behaviorName] = {
55
init: (element, valueAccessor, allBindings, viewModel, context) => {
6-
const params = ko.toJSON(valueAccessor());
6+
const params = ko.unwrap(valueAccessor());
77
// Ensure params are converted to a plain object if needed
8-
const behavior = new BehaviorClass(element, params, context);
8+
const behavior = new BehaviorClass(element, params);
99

1010
// store instance using Knockout's DOM data utils
1111
ko.utils.domData.set(element, behaviorName, behavior);
Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,4 @@
1-
import * as ko from "knockout";
2-
import { ListboxBehavior, ListboxOptions } from "@paperbits/common/behaviors/behavior.listbox";
1+
import { ListboxBehavior } from "@paperbits/common/behaviors/behavior.listbox";
2+
import { registerKnockoutBehavior } from "../behaviors/knockoutBehavior";
33

4-
ko.bindingHandlers["listbox"] = {
5-
init: (listboxElement: HTMLElement, valueAccessor: () => ListboxOptions) => {
6-
const originalOptions = valueAccessor();
7-
8-
// Adapt the onSelect callback to maintain the original contract (passing ko.dataFor(element))
9-
// while the behavior itself now passes the HTMLElement.
10-
const adaptedOptions: ListboxOptions = {
11-
onSelect: (selectedElement: HTMLElement) => {
12-
if (originalOptions && originalOptions.onSelect) {
13-
originalOptions.onSelect(ko.dataFor(selectedElement));
14-
}
15-
}
16-
};
17-
18-
const behaviorHandle = ListboxBehavior.attach(listboxElement, adaptedOptions);
19-
20-
ko.utils.domNodeDisposal.addDisposeCallback(listboxElement, (): void => {
21-
if (behaviorHandle && behaviorHandle.detach) {
22-
behaviorHandle.detach();
23-
}
24-
});
25-
}
26-
};
4+
registerKnockoutBehavior("listbox", ListboxBehavior);

0 commit comments

Comments
 (0)