UNPKG

two-way-binding

Version:

javascript the simplest two-way binding

39 lines (38 loc) 1.2 kB
function twoWay(object,dom){ if(!object.__cb__) { Object.defineProperty(object,'__cb__',{value: [], enumerable: false}) } let objectValue = undefined; if(!object.hasOwnProperty('value')){ Object.defineProperty(object,'value',{ 'get'(){ return objectValue; }, 'set'(newVal){ if(object.value == newVal) return; object.__cb__.forEach(cb=>{ cb(newVal); }) objectValue = newVal; } }) } object.__cb__.push(value=>{ let type = { 'checkbox'(){ dom.checked = !!value; }, 'radio'(){ dom.checked = (value == dom.value) }, 'default'(){ dom.value = value; } } type[dom.type] ? type[dom.type]() : type.default(); }); let eventCallBack = ()=>{ let type = { 'checkbox'(){ object.value = dom.checked; }, 'radio'(){ dom.checked ? object.value = dom.value : true ; }, 'default'(){ object.value = dom.value; } }; type[dom.type] ? type[dom.type]() : type.default(); }; dom && dom.addEventListener('change', eventCallBack ,false); dom && dom.addEventListener('input', eventCallBack ,false); return { onUpdated(cb){ object.__cb__.push(cb); return this;} } } export default twoWay;