From 384ba394e73887b53d1097bad127a1194bebf3a2 Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Tue, 11 Aug 2015 16:31:30 +0300 Subject: [PATCH 1/2] gesture binding fixed + test --- CrossPlatformModules.csproj | 2 ++ apps/ui-tests-app/pages/gesture-binding.ts | 16 ++++++++++++++++ apps/ui-tests-app/pages/gesture-binding.xml | 6 ++++++ ui/builder/component-builder.ts | 16 ++++++++++------ 4 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 apps/ui-tests-app/pages/gesture-binding.ts create mode 100644 apps/ui-tests-app/pages/gesture-binding.xml diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj index 2dc308c0b..ee277bb4c 100644 --- a/CrossPlatformModules.csproj +++ b/CrossPlatformModules.csproj @@ -146,6 +146,7 @@ + animation.d.ts @@ -934,6 +935,7 @@ + diff --git a/apps/ui-tests-app/pages/gesture-binding.ts b/apps/ui-tests-app/pages/gesture-binding.ts new file mode 100644 index 000000000..1b537c0a2 --- /dev/null +++ b/apps/ui-tests-app/pages/gesture-binding.ts @@ -0,0 +1,16 @@ +import observable = require("data/observable"); +import gestures = require("ui/gestures"); +import pages = require("ui/page"); + +export function pageLoaded(args: observable.EventData) { + var page = args.object; + page.bindingContext = { tapAction: tapAction, doubleTapAction: doubleTapAction }; +} + +export function tapAction(args: gestures.GestureEventData) { + console.log("tapAction") +} + +export function doubleTapAction(args: gestures.GestureEventData) { + console.log("doubleTapAction") +} \ No newline at end of file diff --git a/apps/ui-tests-app/pages/gesture-binding.xml b/apps/ui-tests-app/pages/gesture-binding.xml new file mode 100644 index 000000000..275055a40 --- /dev/null +++ b/apps/ui-tests-app/pages/gesture-binding.xml @@ -0,0 +1,6 @@ + + + + diff --git a/ui/builder/component-builder.ts b/ui/builder/component-builder.ts index a8d4fae81..9d06aa9fc 100644 --- a/ui/builder/component-builder.ts +++ b/ui/builder/component-builder.ts @@ -30,6 +30,8 @@ var DOCK = "dock"; var LEFT = "left"; var TOP = "top"; +var eventHandlers, gestureHandlers = {}; + export function getComponentModule(elementName: string, namespace: string, attributes: Object, exports: Object): definition.ComponentModule { var instance: view.View; var instanceModule: Object; @@ -103,6 +105,8 @@ export function getComponentModule(elementName: string, namespace: string, attri } } + eventHandlers, gestureHandlers = {}; + componentModule = { component: instance, exports: instanceModule, bindings: bindings }; } @@ -180,34 +184,34 @@ export function setPropertyValue(instance: view.View, instanceModule: Object, ex function attachEventBinding(instance: view.View, eventName: string, value: string) { // Get the event handler from instance.bindingContext. - var propertyChangeHandler = (args: observable.PropertyChangeData) => { + eventHandlers[eventName] = (args: observable.PropertyChangeData) => { if (args.propertyName === "bindingContext") { var handler = instance.bindingContext && instance.bindingContext[getBindingExpressionFromAttribute(value)]; // Check if the handler is function and add it to the instance for specified event name. if (types.isFunction(handler)) { instance.on(eventName, handler, instance.bindingContext); } - instance.off(observable.Observable.propertyChangeEvent, propertyChangeHandler); + instance.off(observable.Observable.propertyChangeEvent, eventHandlers[eventName]); } }; - instance.on(observable.Observable.propertyChangeEvent, propertyChangeHandler); + instance.on(observable.Observable.propertyChangeEvent, eventHandlers[eventName]); } function attachGestureBinding(instance: view.View, gestureName: string, value: string) { // Get the event handler from instance.bindingContext. - var propertyChangeHandler = (args: observable.PropertyChangeData) => { + gestureHandlers[gestureName] = (args: observable.PropertyChangeData) => { if (args.propertyName === "bindingContext") { var handler = instance.bindingContext && instance.bindingContext[getBindingExpressionFromAttribute(value)]; // Check if the handler is function and add it to the instance for specified event name. if (types.isFunction(handler)) { instance.observe(gestures.fromString(gestureName.toLowerCase()), handler, instance.bindingContext); } - instance.off(observable.Observable.propertyChangeEvent, propertyChangeHandler); + instance.off(observable.Observable.propertyChangeEvent, gestureHandlers[gestureName]); } }; - instance.on(observable.Observable.propertyChangeEvent, propertyChangeHandler); + instance.on(observable.Observable.propertyChangeEvent, gestureHandlers[gestureName]); } function isGesture(name: string, instance: any): boolean { From c1378b427fd4df0ae537eb50a22e5f5b1ab33d2f Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Wed, 12 Aug 2015 09:33:14 +0300 Subject: [PATCH 2/2] code fixed --- ui/builder/component-builder.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/builder/component-builder.ts b/ui/builder/component-builder.ts index 9d06aa9fc..9274fd903 100644 --- a/ui/builder/component-builder.ts +++ b/ui/builder/component-builder.ts @@ -30,7 +30,8 @@ var DOCK = "dock"; var LEFT = "left"; var TOP = "top"; -var eventHandlers, gestureHandlers = {}; +var eventHandlers = {}, + gestureHandlers = {}; export function getComponentModule(elementName: string, namespace: string, attributes: Object, exports: Object): definition.ComponentModule { var instance: view.View;