Skip to content

Commit

Permalink
🐛 Allows Class methods/props to be exposed as the root data component
Browse files Browse the repository at this point in the history
  • Loading branch information
ekwoka committed Feb 15, 2024
1 parent 9501ba4 commit a5b2427
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
6 changes: 3 additions & 3 deletions packages/alpinejs/src/scope.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ let mergeProxyTrap = {
if (name == Symbol.unscopables) return false;

return objects.some((obj) =>
Object.prototype.hasOwnProperty.call(obj, name)
Reflect.has(obj, name)
);
},

Expand All @@ -57,7 +57,7 @@ let mergeProxyTrap = {

return Reflect.get(
objects.find((obj) =>
Object.prototype.hasOwnProperty.call(obj, name)
Reflect.has(obj, name)
) || {},
name,
thisProxy
Expand All @@ -66,7 +66,7 @@ let mergeProxyTrap = {

set({ objects }, name, value, thisProxy) {
const target = objects.find((obj) =>
Object.prototype.hasOwnProperty.call(obj, name)
Reflect.has(obj, name)
) || objects[objects.length - 1];
const descriptor = Object.getOwnPropertyDescriptor(target, name);
if (descriptor?.set && descriptor?.get)
Expand Down
29 changes: 29 additions & 0 deletions tests/cypress/integration/scope.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,32 @@ test(
get("span#two").should(haveText("foobar"));
}
);

test(
"allows accessing class methods",
[
html`
<script>
class Counter {
value = 0;
constructor() {}
increment() {
this.value++;
}
}
document.addEventListener("alpine:init", () =>
Alpine.data("counter", () => new Counter())
)
</script>
<div x-data="counter">
<button type="button" @click="increment" x-text=value></button>
</div>
`,
],
({ get }) => {
get("button").should(haveText("0"));
get("button").click();
get("button").should(haveText("1"));
}
);

0 comments on commit a5b2427

Please sign in to comment.