diff --git a/doric-js/bundle/doric-lib.es5.js b/doric-js/bundle/doric-lib.es5.js index 2b8b7a15..e6f26ee5 100644 --- a/doric-js/bundle/doric-lib.es5.js +++ b/doric-js/bundle/doric-lib.es5.js @@ -185,6 +185,18 @@ function Property(target, propKey) { }, }); } +function InconsistProperty(target, propKey) { + Object.defineProperty(target, propKey, { + get: function () { + return Reflect.get(this, "__prop__" + propKey, this); + }, + set: function (v) { + var oldV = Reflect.get(this, "__prop__" + propKey, this); + Reflect.set(this, "__prop__" + propKey, v, this); + Reflect.apply(this.onPropertyChanged, this, [propKey, oldV, v]); + }, + }); +} var View = /** @class */ (function () { function View() { this.width = 0; @@ -3546,6 +3558,7 @@ exports.Gravity = Gravity; exports.Group = Group; exports.HLayout = HLayout; exports.Image = Image; +exports.InconsistProperty = InconsistProperty; exports.Input = Input; exports.LEFT = LEFT; exports.LayoutConfigImpl = LayoutConfigImpl; diff --git a/doric-js/bundle/doric-lib.js b/doric-js/bundle/doric-lib.js index f9e3266e..94596ed1 100644 --- a/doric-js/bundle/doric-lib.js +++ b/doric-js/bundle/doric-lib.js @@ -125,8 +125,13 @@ var __decorate$d = (undefined && undefined.__decorate) || function (decorators, var __metadata$d = (undefined && undefined.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; +const PROP_CONSIST = 1; +const PROP_INCONSIST = 2; function Property(target, propKey) { - Reflect.defineMetadata(propKey, true, target); + Reflect.defineMetadata(propKey, PROP_CONSIST, target); +} +function InconsistProperty(target, propKey) { + Reflect.defineMetadata(propKey, PROP_INCONSIST, target); } class View { constructor() { @@ -150,7 +155,10 @@ class View { set: (target, p, v, receiver) => { const oldV = Reflect.get(target, p, receiver); const ret = Reflect.set(target, p, v, receiver); - if (Reflect.getMetadata(p, target) && oldV !== v) { + if (Reflect.getMetadata(p, target) === PROP_CONSIST && oldV !== v) { + receiver.onPropertyChanged(p.toString(), oldV, v); + } + else if (Reflect.getMetadata(p, target) === PROP_INCONSIST) { receiver.onPropertyChanged(p.toString(), oldV, v); } return ret; @@ -2736,6 +2744,7 @@ exports.Gravity = Gravity; exports.Group = Group; exports.HLayout = HLayout; exports.Image = Image; +exports.InconsistProperty = InconsistProperty; exports.Input = Input; exports.LEFT = LEFT; exports.LayoutConfigImpl = LayoutConfigImpl; diff --git a/doric-js/bundle/doric-vm.js b/doric-js/bundle/doric-vm.js index 36da51c8..1e6b7aac 100644 --- a/doric-js/bundle/doric-vm.js +++ b/doric-js/bundle/doric-vm.js @@ -1620,8 +1620,13 @@ var __decorate$d = (undefined && undefined.__decorate) || function (decorators, var __metadata$d = (undefined && undefined.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; +const PROP_CONSIST = 1; +const PROP_INCONSIST = 2; function Property(target, propKey) { - Reflect.defineMetadata(propKey, true, target); + Reflect.defineMetadata(propKey, PROP_CONSIST, target); +} +function InconsistProperty(target, propKey) { + Reflect.defineMetadata(propKey, PROP_INCONSIST, target); } class View { constructor() { @@ -1645,7 +1650,10 @@ class View { set: (target, p, v, receiver) => { const oldV = Reflect.get(target, p, receiver); const ret = Reflect.set(target, p, v, receiver); - if (Reflect.getMetadata(p, target) && oldV !== v) { + if (Reflect.getMetadata(p, target) === PROP_CONSIST && oldV !== v) { + receiver.onPropertyChanged(p.toString(), oldV, v); + } + else if (Reflect.getMetadata(p, target) === PROP_INCONSIST) { receiver.onPropertyChanged(p.toString(), oldV, v); } return ret; @@ -4403,9 +4411,11 @@ global$1.nativeLog = (type, msg) => { }; global$1.nativeRequire = () => { console.error("Do not call nativeRequire here"); + return false; }; global$1.nativeBridge = () => { console.error("Do not call nativeBridge here"); + return false; }; exports.AnimationSet = AnimationSet; @@ -4423,6 +4433,7 @@ exports.Gravity = Gravity; exports.Group = Group; exports.HLayout = HLayout; exports.Image = Image; +exports.InconsistProperty = InconsistProperty; exports.Input = Input; exports.LEFT = LEFT; exports.LayoutConfigImpl = LayoutConfigImpl; diff --git a/doric-js/index.d.ts b/doric-js/index.d.ts index 9a03da72..85a024b2 100644 --- a/doric-js/index.d.ts +++ b/doric-js/index.d.ts @@ -177,6 +177,7 @@ declare module 'doric/lib/src/ui/view' { import { IAnimation } from "doric/lib/src/ui/animation"; import { FlexConfig } from "doric/lib/src/util/flexbox"; export function Property(target: Object, propKey: string): void; + export function InconsistProperty(target: Object, propKey: string): void; export type NativeViewModel = { id: string; type: string; diff --git a/doric-js/lib/index.debug.js b/doric-js/lib/index.debug.js index eeee32cd..e04002cd 100644 --- a/doric-js/lib/index.debug.js +++ b/doric-js/lib/index.debug.js @@ -203,8 +203,10 @@ global.nativeLog = (type, msg) => { }; global.nativeRequire = () => { console.error("Do not call nativeRequire here"); + return false; }; global.nativeBridge = () => { console.error("Do not call nativeBridge here"); + return false; }; export * from './index'; diff --git a/doric-js/lib/src/ui/view.d.ts b/doric-js/lib/src/ui/view.d.ts index 6a19eccf..afdf4009 100644 --- a/doric-js/lib/src/ui/view.d.ts +++ b/doric-js/lib/src/ui/view.d.ts @@ -5,6 +5,7 @@ import { LayoutConfig } from '../util/layoutconfig'; import { IAnimation } from "./animation"; import { FlexConfig } from "../util/flexbox"; export declare function Property(target: Object, propKey: string): void; +export declare function InconsistProperty(target: Object, propKey: string): void; export declare type NativeViewModel = { id: string; type: string; diff --git a/doric-js/lib/src/ui/view.js b/doric-js/lib/src/ui/view.js index 09791e25..a5b2e9cc 100644 --- a/doric-js/lib/src/ui/view.js +++ b/doric-js/lib/src/ui/view.js @@ -10,8 +10,13 @@ var __metadata = (this && this.__metadata) || function (k, v) { import { obj2Model } from "../util/types"; import { uniqueId } from "../util/uniqueId"; import { loge } from "../util/log"; +const PROP_CONSIST = 1; +const PROP_INCONSIST = 2; export function Property(target, propKey) { - Reflect.defineMetadata(propKey, true, target); + Reflect.defineMetadata(propKey, PROP_CONSIST, target); +} +export function InconsistProperty(target, propKey) { + Reflect.defineMetadata(propKey, PROP_INCONSIST, target); } export class View { constructor() { @@ -35,7 +40,10 @@ export class View { set: (target, p, v, receiver) => { const oldV = Reflect.get(target, p, receiver); const ret = Reflect.set(target, p, v, receiver); - if (Reflect.getMetadata(p, target) && oldV !== v) { + if (Reflect.getMetadata(p, target) === PROP_CONSIST && oldV !== v) { + receiver.onPropertyChanged(p.toString(), oldV, v); + } + else if (Reflect.getMetadata(p, target) === PROP_INCONSIST) { receiver.onPropertyChanged(p.toString(), oldV, v); } return ret; diff --git a/doric-js/src/ui/view.es5.ts b/doric-js/src/ui/view.es5.ts index c38b33d2..204bd12b 100644 --- a/doric-js/src/ui/view.es5.ts +++ b/doric-js/src/ui/view.es5.ts @@ -37,6 +37,19 @@ export function Property(target: View, propKey: string) { }) } +export function InconsistProperty(target: Object, propKey: string) { + Object.defineProperty(target, propKey, { + get: function () { + return Reflect.get(this, `__prop__${propKey}`, this) + }, + set: function (v) { + const oldV = Reflect.get(this, `__prop__${propKey}`, this) + Reflect.set(this, `__prop__${propKey}`, v, this) + Reflect.apply(this.onPropertyChanged, this, [propKey, oldV, v]) + }, + }) +} + export type NativeViewModel = { id: string; type: string; diff --git a/doric-js/src/ui/view.ts b/doric-js/src/ui/view.ts index 8f1798e6..07a3f840 100644 --- a/doric-js/src/ui/view.ts +++ b/doric-js/src/ui/view.ts @@ -22,8 +22,15 @@ import { LayoutConfig } from '../util/layoutconfig' import { IAnimation } from "./animation"; import { FlexConfig } from "../util/flexbox"; +const PROP_CONSIST = 1; +const PROP_INCONSIST = 2; + export function Property(target: Object, propKey: string) { - Reflect.defineMetadata(propKey, true, target) + Reflect.defineMetadata(propKey, PROP_CONSIST, target) +} + +export function InconsistProperty(target: Object, propKey: string) { + Reflect.defineMetadata(propKey, PROP_INCONSIST, target) } export type NativeViewModel = { @@ -118,7 +125,9 @@ export abstract class View implements Modeling { set: (target, p, v, receiver) => { const oldV = Reflect.get(target, p, receiver) const ret = Reflect.set(target, p, v, receiver) - if (Reflect.getMetadata(p, target) && oldV !== v) { + if (Reflect.getMetadata(p, target) === PROP_CONSIST && oldV !== v) { + receiver.onPropertyChanged(p.toString(), oldV, v) + } else if (Reflect.getMetadata(p, target) === PROP_INCONSIST) { receiver.onPropertyChanged(p.toString(), oldV, v) } return ret diff --git a/doric-js/src/widget/input.ts b/doric-js/src/widget/input.ts index 67d94e21..90d65ed0 100644 --- a/doric-js/src/widget/input.ts +++ b/doric-js/src/widget/input.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { View, Property } from "../ui/view"; +import { View, Property, InconsistProperty } from "../ui/view"; import { Color } from "../util/color"; import { Gravity } from "../util/gravity"; import { BridgeContext } from "../runtime/global"; @@ -21,7 +21,7 @@ import { layoutConfig } from "../util/index.util"; export class Input extends View { - @Property + @InconsistProperty text?: string @Property @@ -53,7 +53,7 @@ export class Input extends View { @Property maxLength?: number - + @Property password?: boolean diff --git a/doric-js/src/widget/switch.ts b/doric-js/src/widget/switch.ts index fc8262a7..44ff82fc 100644 --- a/doric-js/src/widget/switch.ts +++ b/doric-js/src/widget/switch.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { View, Property } from "../ui/view"; +import { View, Property, InconsistProperty } from "../ui/view"; import { Color } from "../util/color"; import { layoutConfig } from "../util/index.util"; @@ -21,7 +21,7 @@ export class Switch extends View { /** * True is on ,false is off,defalut is off. */ - @Property + @InconsistProperty state?: boolean /** * Switch change callback