rewrite to use reactiveDict, added dynamic option, changed the beforeSet() works