js/listener.md

55 lines
1.6 KiB
Markdown
Raw Normal View History

# Listener
A generator for proxy objects that run callbacks when properties are changed.
## Interface
```js
listener(target={})
// Creates a new proxy for target
listener.listen(prop, callback)
// Adds a callback on a property change
listener.listen([prop, ...], callback)
// Adds a callback to several properties at once
listener.listen(prop)
// Removes all callbacks from a given property
```
2021-10-19 16:08:48 +00:00
2021-11-23 15:30:11 +00:00
```js
bindContent(listener, "value")
2021-11-23 15:30:11 +00:00
// Returns a text node with listener.value as its content
// that will change whenever the value is changed
bindContent(listener, "value", html_element)
2021-11-23 15:30:11 +00:00
// Binds an existng HTML or Text node
bindContent(listener, "value", html_element, value => value.toUpperCase())
// Accepts a function to transform the value
bindContent(listener, "value", html_element, value => document.createElement("hr"))
// Also accepts HTML elements when the target is not a text node
2021-11-23 15:30:11 +00:00
```
This function *may* be **removed** in the future if it doesn't show any
usefullnes that isn't already provided by the skooma bind function.
2021-10-19 16:08:48 +00:00
## Example
```js
import Listener from 'listener.js'
const listener = Listener({})
// Listen for any changed property
listener.listen("*", (value, prop) => console.log(`${prop} changed to ${value}`))
// Listen only for changes to the foo property
listener.listen("foo", prop => console.log("it was foo, by the way"))
// Several listeners for one property are possible
// They will be executed in order of definition
listener.listen("foo", prop => do_something())
listener.foo = "New Value"
// Triggers 3 handlers
listener.bar = "New Value"
// Triggers only the * handler
```