mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 20:11:24 +08:00
gesture binding fixed + test
This commit is contained in:
@ -146,6 +146,7 @@
|
||||
<TypeScriptCompile Include="apps\tests\ui\animation\animation-tests.ts" />
|
||||
<TypeScriptCompile Include="apps\tests\xml-declaration\inherited-base-page.ts" />
|
||||
<TypeScriptCompile Include="apps\tests\xml-declaration\inherited-page.ts" />
|
||||
<TypeScriptCompile Include="apps\ui-tests-app\pages\gesture-binding.ts" />
|
||||
<TypeScriptCompile Include="ui\animation\animation.d.ts" />
|
||||
<TypeScriptCompile Include="ui\animation\animation-common.ts">
|
||||
<DependentUpon>animation.d.ts</DependentUpon>
|
||||
@ -934,6 +935,7 @@
|
||||
<Content Include="apps\ui-tests-app\layouts\wrap.xml" />
|
||||
<Content Include="apps\ui-tests-app\pages\background.xml" />
|
||||
<Content Include="apps\ui-tests-app\pages\circle.xml" />
|
||||
<Content Include="apps\ui-tests-app\pages\gesture-binding.xml" />
|
||||
<Content Include="apps\ui-tests-app\pages\i86.xml" />
|
||||
<Content Include="apps\template-blank\app.css" />
|
||||
<Content Include="apps\template-hello-world\app.css" />
|
||||
|
16
apps/ui-tests-app/pages/gesture-binding.ts
Normal file
16
apps/ui-tests-app/pages/gesture-binding.ts
Normal file
@ -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 = <pages.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")
|
||||
}
|
6
apps/ui-tests-app/pages/gesture-binding.xml
Normal file
6
apps/ui-tests-app/pages/gesture-binding.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<Page loaded="pageLoaded">
|
||||
<StackLayout>
|
||||
<Label text="Handlers as exports" tap="tapAction" doubleTap="doubleTapAction" />
|
||||
<Label text="Bound handlers" tap="{{ tapAction }}" doubleTap="{{ doubleTapAction }}" />
|
||||
</StackLayout>
|
||||
</Page>
|
@ -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 {
|
||||
|
Reference in New Issue
Block a user