Skip to content

Commit 8d8fe17

Browse files
author
Vladimir Enchev
committed
Context support for gesture handler binding
1 parent d9216ac commit 8d8fe17

File tree

6 files changed

+25
-17
lines changed

6 files changed

+25
-17
lines changed

ui/builder/component-builder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ function attachGestureBinding(instance: view.View, gestureName: string, value: s
194194
var handler = instance.bindingContext && instance.bindingContext[getBindingExpressionFromAttribute(value)];
195195
// Check if the handler is function and add it to the instance for specified event name.
196196
if (types.isFunction(handler)) {
197-
instance.observe(gestures.fromString(gestureName.toLowerCase()), handler);
197+
instance.observe(gestures.fromString(gestureName.toLowerCase()), handler, instance.bindingContext);
198198
}
199199
instance.off(observable.Observable.propertyChangeEvent, propertyChangeHandler);
200200
}

ui/core/view-common.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ export class View extends proxy.ProxyObject implements definition.View {
147147
this._visualState = visualStateConstants.Normal;
148148
}
149149

150-
observe(type: number, callback: (args: gestures.GestureEventData) => void): gestures.GesturesObserver {
151-
this._gesturesObserver = gestures.observe(this, type, callback);
150+
observe(type: number, callback: (args: gestures.GestureEventData) => void, thisArg?: any): gestures.GesturesObserver {
151+
this._gesturesObserver = gestures.observe(this, type, callback, thisArg);
152152
return this._gesturesObserver;
153153
}
154154

ui/core/view.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ declare module "ui/core/view" {
355355
*/
356356
public focus(): boolean;
357357

358-
observe(type: number, callback: (args: gestures.GestureEventData) => void): gestures.GesturesObserver;
358+
observe(type: number, callback: (args: gestures.GestureEventData) => void, thisArg?: any): gestures.GesturesObserver;
359359

360360
/**
361361
* A basic method signature to hook an event listener (shortcut alias to the addEventListener method).

ui/gestures/gestures-common.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ export enum SwipeDirection {
2828
down = 1 << 3
2929
}
3030

31-
export function observe(target: view.View, type: number, callback: (args: definition.GestureEventData) => void): definition.GesturesObserver {
31+
export function observe(target: view.View, type: number, callback: (args: definition.GestureEventData) => void, thisArg?: any): definition.GesturesObserver {
3232
var observer = new definition.GesturesObserver(callback);
33-
observer.observe(target, type);
33+
observer.observe(target, type, thisArg);
3434
return observer;
3535
}
3636

ui/gestures/gestures.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ declare module "ui/gestures" {
126126
* @param target - View which will be watched for originating a specific gesture.
127127
* @param type - Type of the gesture.
128128
*/
129-
observe(target: view.View, type: GestureTypes);
129+
observe(target: view.View, type: GestureTypes, thisArg?: any);
130130

131131
/**
132132
* Disconnects the gesture observer.
@@ -140,7 +140,7 @@ declare module "ui/gestures" {
140140
* @param type - Type of the gesture.
141141
* @param callback - A function that will be executed when a gesture is received.
142142
*/
143-
export function observe(target: view.View, type: GestureTypes, callback: (args: GestureEventData) => void): GesturesObserver;
143+
export function observe(target: view.View, type: GestureTypes, callback: (args: GestureEventData) => void, thisArg?: any): GesturesObserver;
144144

145145
/**
146146
* Returns a string representation of a gesture type.

ui/gestures/gestures.ios.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,20 @@ class UIGestureRecognizerImpl extends NSObject {
1616
private _owner: GesturesObserver;
1717
private _type: any;
1818
private _callback: Function;
19+
private _context: any;
1920

20-
public initWithOwnerTypeCallback(owner: GesturesObserver, type: any, callback?: Function): UIGestureRecognizerImpl {
21+
public initWithOwnerTypeCallback(owner: GesturesObserver, type: any, callback?: Function, thisArg?: any): UIGestureRecognizerImpl {
2122
this._owner = owner;
2223
this._type = type;
24+
2325
if (callback) {
2426
this._callback = callback;
2527
}
2628

29+
if (thisArg) {
30+
this._context = thisArg;
31+
}
32+
2733
return this;
2834
}
2935

@@ -44,7 +50,7 @@ class UIGestureRecognizerImpl extends NSObject {
4450
};
4551

4652
if (callback) {
47-
callback(args);
53+
callback.call(this._context, args);
4854
}
4955
}
5056
}
@@ -53,6 +59,7 @@ export class GesturesObserver implements definition.GesturesObserver {
5359
public _callback: (args: definition.GestureEventData) => void;
5460
public _target: view.View;
5561
private _recognizers: {};
62+
private _context: any;
5663

5764
private _onTargetLoaded: (data: observable.EventData) => void;
5865
private _onTargetUnloaded: (data: observable.EventData) => void;
@@ -62,9 +69,10 @@ export class GesturesObserver implements definition.GesturesObserver {
6269
this._recognizers = {};
6370
}
6471

65-
public observe(target: view.View, type: definition.GestureTypes) {
72+
public observe(target: view.View, type: definition.GestureTypes, thisArg?: any) {
6673
if (target) {
6774
this._target = target;
75+
this._context = thisArg;
6876
this._onTargetLoaded = args => {
6977
trace.write(this._target + ".target loaded. _nativeView:" + this._target._nativeView, "gestures");
7078
this._attach(target, type);
@@ -84,7 +92,7 @@ export class GesturesObserver implements definition.GesturesObserver {
8492

8593
}
8694

87-
private _attach(target: view.View, type: definition.GestureTypes) {
95+
private _attach(target: view.View, type: definition.GestureTypes) {
8896
trace.write(target + "._attach() _nativeView:" + target._nativeView, "gestures");
8997
this._dettach();
9098

@@ -175,14 +183,14 @@ export class GesturesObserver implements definition.GesturesObserver {
175183

176184
private _executeCallback(args: definition.GestureEventData) {
177185
if (this._callback) {
178-
this._callback(args);
186+
this._callback.call(this._context, args);
179187
}
180188
}
181189

182190
private _createRecognizer(type: definition.GestureTypes, callback?: (args: definition.GestureEventData) => void, swipeDirection?: UISwipeGestureRecognizerDirection): UIGestureRecognizer {
183191
var recognizer: UIGestureRecognizer;
184192
var name = definition.toString(type);
185-
var target = _createUIGestureRecognizerTarget(this, type, callback);
193+
var target = _createUIGestureRecognizerTarget(this, type, callback, this._context);
186194
var recognizerType = _getUIGestureRecognizerType(type);
187195

188196
if (recognizerType) {
@@ -194,7 +202,7 @@ export class GesturesObserver implements definition.GesturesObserver {
194202
else {
195203
recognizer = recognizerType.alloc().initWithTargetAction(target, "recognize");
196204
}
197-
205+
198206
if (recognizer) {
199207
this._recognizers[name] = <RecognizerCache>{ recognizer: recognizer, target: target };
200208
}
@@ -204,8 +212,8 @@ export class GesturesObserver implements definition.GesturesObserver {
204212
}
205213
}
206214

207-
function _createUIGestureRecognizerTarget(owner: GesturesObserver, type: definition.GestureTypes, callback?: (args: definition.GestureEventData) => void): any {
208-
return UIGestureRecognizerImpl.new().initWithOwnerTypeCallback(owner, type, callback);
215+
function _createUIGestureRecognizerTarget(owner: GesturesObserver, type: definition.GestureTypes, callback?: (args: definition.GestureEventData) => void, thisArg?: any): any {
216+
return UIGestureRecognizerImpl.new().initWithOwnerTypeCallback(owner, type, callback, thisArg);
209217
}
210218

211219
interface RecognizerCache {

0 commit comments

Comments
 (0)