-
Notifications
You must be signed in to change notification settings - Fork 180
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Element Events list #392
Comments
I think there are a few options here, so I'm not sure it makes sense in the core library. The shape of the API might differ depending on how you want to handle elementOpen('div');
bindEvents({
onclick: () => {...}
});
elementClose('div'); and your next call is: elementOpen('div');
elementClose('div'); You would want to make sure to remove the event listeners. For a higher level library, this probably is not too big of a deal since it likely does not use Another option is something like: import {attributes} from 'incremental-dom';
export const eventListeners = Symbol();
attributes[eventListeners] = function(el, unused, newValue = {}) {
const oldValue = el[eventListeners];
// remove any missing listeners, add any new ones
el[eventListeners] = newValue;
}; which could then used as (directly or through a higher level API): import {eventListeners} from '...';
elementOpen('div', null, null, eventListeners, {
click: () => {},
mousedown: {} => {},
}); |
Thanks @sparhami, that was quite useful actually. I ended up with the following code to achieve what i was looking for: import {attributes} from 'incremental-dom';
export const eventListeners = Symbol();
attributes[eventListeners] = function (el, attribute, events) {
for (let event in events) {
let eventCallback = events[event];
el[event] = function () {
if (Array.isArray(eventCallback)) {
for (let callback of eventCallback) {
callback.apply(this);
}
} else {
eventCallback.apply(this);
}
};
}
}; Now from anywhere else it could be as any of the following: import {eventListeners} from '...';
elementVoid('input', null, null, eventListeners, {
onchange: function () {
console.log(this.value);
},
}); Or passing an array of callbacks for each event import {eventListeners} from '...';
elementVoid('input', null, null, eventListeners, {
onchange: [function () {
console.log(this.value);
}, function () {
// do something else
}],
}); But i want to ask why wouldn't that be in the core library? I think same applies to |
Hello,
I was wondering if there such a thing that i could pass an object that contains events list instead of passing it as an attribute
For example
Instead of that, what about the following:
Or pass an array of callbacks for each/certain events
The text was updated successfully, but these errors were encountered: