defineProperty // https://github.com/RubyLouvre/avalon/issues/272Object.defineProperty(element, "value", { set: function(newValue) { var node = this.attributes.value if (!node || newValue !== node.value) { this.setAttribute("value", newValu
// https://github.com/RubyLouvre/avalon/issues/272
Object.defineProperty(element, "value", {
set: function(newValue) {
var node = this.attributes.value
if (!node || newValue !== node.value) {
this.setAttribute("value", newValue)
avalon.fire(this, "input")
}
},
get: function() {
var node = this.attributes.value
return node ? node.value : ""
},
enumerable: true,
configurable: true
})
// http://stackoverflow.com/questions/19325938/trigger-action-on-programmatic-change-to-an-input-value
// 优化版
const src_id = unionObj.id
const target_id = unionObj.target.id
const _uObj = elements[target_id]
const targetDom = elements['#'+target_id]
const srcDom = elements['#'+src_id]
Object.defineProperty(targetDom, "value", {
get: function() {
return this.getAttribute("value");
},
set: function(newValue) {
console.log("set");
this.setAttribute("value", newValue);
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
targetDom.dispatchEvent(evt);
},
})
$(srcDom).on('input', function(){
targetDom.value = srcDom.value;
})
$(targetDom).on('change', function(){
console.log(this.value);
})
// --完善版
function watchConfig(_value, key){
let bValue = _value
const that = this
return {
get: function(){
return bValue
},
set: function(val){
bValue = val
that.form[this.id] = val
that.elements['#'+this.id] ? that.elements['#'+this.id].value = val : ''
},
enumerable: true,
configurable: true
}
}
// 监控/watch数据
// store: target
// allocation: source
function createStore(store, allocation){
let wstore = store||{}
watchConfig = this::watchConfig
O.keys(allocation).forEach( function(item){
let _value = allocation[item]
if (typeof _value != 'object' && typeof _value != 'function') {
O.defineProperty(wstore, item, watchConfig(_value, item))
}
else if (!_value) {
O.defineProperty(wstore, item, watchConfig(_value, item))
}
else if (A.isArray(_value)) {
O.defineProperty(wstore, item, watchConfig(_value, item))
}
else {
wstore[item] = {}
createStore(wstore[item], _value)
}
})
return wstore
}
