UNPKG

@danielkalen/simplybind

Version:

Magically simple, framework-less one-way/two-way data binding for frontend/backend in ~5kb.

68 lines (60 loc) 1.39 kB
import { toNumber, isArray, indexOf, looseEqual } from '../../../util/index' export default { bind () { var self = this var el = this.el this.getValue = function () { return el.hasOwnProperty('_value') ? el._value : self.params.number ? toNumber(el.value) : el.value } function getBooleanValue () { var val = el.checked if (val && el.hasOwnProperty('_trueValue')) { return el._trueValue } if (!val && el.hasOwnProperty('_falseValue')) { return el._falseValue } return val } this.listener = function () { var model = self._watcher.value if (isArray(model)) { var val = self.getValue() if (el.checked) { if (indexOf(model, val) < 0) { model.push(val) } } else { model.$remove(val) } } else { self.set(getBooleanValue()) } } this.on('change', this.listener) if (el.hasAttribute('checked')) { this.afterBind = this.listener } }, update (value) { var el = this.el if (isArray(value)) { el.checked = indexOf(value, this.getValue()) > -1 } else { if (el.hasOwnProperty('_trueValue')) { el.checked = looseEqual(value, el._trueValue) } else { el.checked = !!value } } } }