Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
117 lines (68 sloc) 2.02 KB

component-attr

evented attributes with automatic dependencies

API

attr(val)

Create a new attr with value set to val

attr = require('attr')

name = attr('Homer Simpson')

xxx()

Read a value

name() // => 'Homer Simpson'

xxx(val)

Write a value

name('Bart Simpson')

name() // => 'Bart Simpson'
  • Emits "change" event with (value, previousValue).
name.on('change', function(new_name, old_name) {
  console.log('my name changed from', old_name, 'to', new_name)
})

Computed attr

Has the same API, except function is passed in and is run to determine the initial value. (has no setter)

fullName = attr(function() {
  return firstName() + ' ' + surName()
})

fullName() // => 'Homer Simpson'

fullName.dependencies // => [ firstName, surName ]

Dependencies on other simple (non-computed) are automatically calculated unless set explicitly via a second argument as in:

fullName = attr(function() {
  return firstName() + ' ' + surName()
}, [firstName])

fullName.dependencies // => [ firstName ]

attr methods

.toggle()

Flips truthy to false and falsey to true

.incr(val)

Increments value by 1 or val

.change(fn)

Binds fn to the change event

.change()

force a change event

.value

contains the current value. Use to get value without running the getter (most useful for computed attr)

.old

contains the last value

.dependencies

Contains a list of dependencies (this will be null for simple attr)

additional

attr.autocompute

By default function values are assumed to be computed. This behaviour can be turned off by setting autocompute.

attr.computed(fn, dependencies)

Explicitly creates a computed attr - this is only useful if autocompute is turned off

attr.dependencies(fn)

Calculates a list of the simple (non-computed) attributes called by running this function

Testing

make && open test/index.html

License

MIT