【发布时间】:2021-03-04 22:35:11
【问题描述】:
目标:在用户输入时将任何更改的表单字段作为“名称-值”对,并在键入时进行去抖动。 示例模板(person 是双向绑定模型)。
<form>
<q-input v-model="person.familyName" />
<q-input v-model="person.givenName" />
...
</form>
我让它与 ES6 代理一起工作,但似乎有代码异味与去抖动回调字典: 每个属性都将自己的回调放到字典中,以免干扰其他字段。
// callback per 'field name' to prevent from skipping changes
// while fast typing with Tab button to switch between fields.
const debounces: { [key: string]: (...args: any[]) => any } = {};
const person = new Proxy(someSourceModel, {
set: (target, key: string, value, receiver) => {
Reflect.set(target, key, value, receiver);
if (!debounces[key])
debounces[key] = debounce(300, (key, value) => // throttle-debounce lib
{
// Do anything with changed key-value pair.
// For example, send it with update to Dexie/PouchDB as
// single field instead of whole object.
console.log(`${String(key)}: ${String(value)}`);
delete debounces[key]; // Cleanup when it fired.
});
debounces[key](key, value); // Fire it!
return true;
}
});
有什么方法可以避免回调字典?
Codesandbox 工作 example 包括在内。
【问题讨论】:
标签: typescript quasar-framework es6-proxy