UNPKG

@morjs/runtime-web

Version:
54 lines 2.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // 获取事件的value function defaultGetValueFromEvent(valuePropName, event) { if (event && event.target && valuePropName in event.target) { return event.target[valuePropName]; } return event; } exports.default = { // 双向绑定 twoWayBinding(thisTarget) { const _this = thisTarget; return function (valuePath, value) { _this.setData({ [valuePath]: value }); }; }, /** * * @param {*} thisTarget 处理数据更改事件的对象 * @param {*} valuePropName 绑定的属性名 * @param {*} valuePath 属性名对应的表达式 * @param {*} getValueFromEvent 对于有些组件,无法通过简单的判断来确定具体value的来源,那么可以通过getValueFromEvent 显式告知runtime * @param {*} otherEventCallBack 其他的事件回调函数。可以形成调用链 */ twoWayBindingMergeChangeEvent(thisTarget, valuePropName, valuePath, getValueFromEvent, otherEventCallBack) { // NOTE: 这里面其实已经不需要关心onChange方法会不会跟自定义组件冲突,导致既触发twoWayBindingMergeChangeEvent 又触发 twoWayBinding。 // 因为,twoWayBinding 的触发,必须是由组件开发者主动通过setData({propname:v}) 来实现的。 // 而onChange 是直接调用 onChange 方法来触发的。 这两种只会有二选一的情况出现。不会同时出现。 // TODO:不过貌似还是有问题,比如:使用组件的时候确实是双向绑定,但是 onChange 是额外触发的 // 这个后面再仔细靠考虑考虑怎么解决 const _this = thisTarget; return function (event) { // 先调用setData。 if (getValueFromEvent && typeof getValueFromEvent === 'function') { _this.setData({ [valuePath]: getValueFromEvent(event) }); } else { _this.setData({ [valuePath]: defaultGetValueFromEvent(valuePropName, event) }); } // 然后调用额外的回调方法 if (otherEventCallBack) { otherEventCallBack(event); } }; } }; //# sourceMappingURL=two-way-binding.js.map