1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  | const defaultOption = { 
 |      valueKey: 'value', 
 |      defaultValueKey: 'defaultValue', 
 |      changeEventName: 'change', 
 |      strict: true, 
 |  }; 
 |  function useControl(option = {}) { 
 |      const { valueKey, defaultValueKey, changeEventName, strict } = Object.assign(Object.assign({}, defaultOption), option); 
 |      const props = this.properties || {}; 
 |      const value = props[valueKey]; 
 |      const defaultValue = props[strict ? defaultValueKey : valueKey]; 
 |      let controlled = false; 
 |      if (strict && typeof value !== 'undefined' && value !== null) { 
 |          controlled = true; 
 |      } 
 |      const set = (newVal, extObj, fn) => { 
 |          this.setData(Object.assign({ [`_${valueKey}`]: newVal }, extObj), fn); 
 |      }; 
 |      return { 
 |          controlled, 
 |          initValue: controlled ? value : defaultValue, 
 |          set, 
 |          get: () => { 
 |              return this.data[`_${valueKey}`]; 
 |          }, 
 |          change: (newVal, customChangeData, customUpdateFn) => { 
 |              this.triggerEvent(changeEventName, typeof customChangeData !== 'undefined' ? customChangeData : newVal); 
 |              if (controlled) { 
 |                  return; 
 |              } 
 |              if (typeof customUpdateFn === 'function') { 
 |                  customUpdateFn(); 
 |              } 
 |              else { 
 |                  set(newVal); 
 |              } 
 |          }, 
 |      }; 
 |  } 
 |  export { useControl }; 
 |  
  |