You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ji...@apache.org on 2017/01/24 08:21:21 UTC
[10/50] [abbrv] incubator-weex git commit: * [ios] format callback
ret data
* [ios] format callback ret data
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/83c747f3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/83c747f3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/83c747f3
Branch: refs/heads/master
Commit: 83c747f318a3d3bf5df9b8493c8f2cc65bab39f7
Parents: 1fb2e0a
Author: acton393 <zh...@gmail.com>
Authored: Tue Jan 10 22:21:12 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Tue Jan 10 22:21:12 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 4 +--
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 30 ++++++++++++++------
.../Sources/Model/WXSDKInstance_private.h | 5 ++--
3 files changed, 26 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83c747f3/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m b/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
index 37a75a3..de07eca 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
@@ -49,10 +49,10 @@
if (![moduleInstance respondsToSelector:selector]) {
// if not implement the selector, then dispatch default module method
if ([self.methodName isEqualToString:@"addEventListener"]) {
- [self.instance _addModuleEventObserversWithArguments:self.arguments moduleClassName:NSStringFromClass(moduleClass)];
+ [self.instance _addModuleEventObserversWithModuleMethod:self];
}
if ([self.methodName isEqualToString:@"removeAllEventListeners"]) {
- [self.instance _removeModuleEventObserverWithArguments:self.arguments moduleClassName:NSStringFromClass(moduleClass)];
+ [self.instance _removeModuleEventObserverWithModuleMethod:self];
}
return nil;
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83c747f3/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index f77e9d5..0220ace 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -307,7 +307,7 @@ typedef enum : NSUInteger {
[data setObject:[NSString stringWithFormat:@"%ld",(long)state] forKey:@"state"];
//[[WXSDKManager bridgeMgr] updateState:self.instanceId data:data];
- [[NSNotificationCenter defaultCenter]postNotificationName:WX_INSTANCE_NOTIFICATION_UPDATE_STATE object:self userInfo:data];
+ [[NSNotificationCenter defaultCenter] postNotificationName:WX_INSTANCE_NOTIFICATION_UPDATE_STATE object:self userInfo:data];
}
- (id)moduleForClass:(Class)moduleClass
@@ -395,28 +395,37 @@ typedef enum : NSUInteger {
#pragma mark Private Methods
-- (void)_addModuleEventObserversWithArguments:(NSArray*)arguments moduleClassName:(NSString*)moduleClassName
+- (void)_addModuleEventObserversWith:(WXModuleMethod *)method
{
- if ([arguments count] < 2) {
+ if ([method.arguments count] < 2) {
WXLogError(@"please check your method parameter!!");
return;
}
- if(![arguments[0] isKindOfClass:[NSString class]]) {
+ if(![method.arguments[0] isKindOfClass:[NSString class]]) {
// arguments[0] will be event name, so it must be a string type value here.
return;
}
- NSMutableArray * methodArguments = [arguments mutableCopy];
- if ([arguments count] == 2) {
+ NSMutableArray * methodArguments = [method.arguments mutableCopy];
+ if ([methodArguments count] == 2) {
[methodArguments addObject:@{@"once": @false}];
}
- [self addModuleEventObservers:methodArguments[0] callback:methodArguments[1] option:methodArguments[2] moduleClassName:moduleClassName];
+ if (![methodArguments[2] isKindOfClass:[NSDictionary class]]) {
+ //arguments[2] is the option value, so it must be a dictionary.
+ return;
+ }
+ Class moduleClass = [WXModuleFactory classWithModuleName:method.moduleName];
+ NSMutableDictionary * option = [methodArguments[3] mutableCopy];
+ [option setObject:method.moduleName forKey:@"moduleName"];
+ // the value for moduleName in option is for the need of callback
+ [self addModuleEventObservers:methodArguments[0] callback:methodArguments[1] option:option moduleClassName:NSClassFromString(moduleClass)];
}
- (void)addModuleEventObservers:(NSString*)event callback:(NSString*)callbackId option:(NSDictionary *)option moduleClassName:(NSString*)moduleClassName
{
BOOL once = [[option objectForKey:@"once"] boolValue];
+ NSString * moduleName = [option objectForKey:@"moduleName"];
NSMutableDictionary * observer = nil;
- NSDictionary * callbackInfo = @{@"callbackId":callbackId,@"once":@(once)};
+ NSDictionary * callbackInfo = @{@"callbackId":callbackId,@"once":@(once),@"moduleName":moduleName};
if(![self checkModuleEventRegistered:event moduleClassName:moduleClassName]) {
//had not registered yet
observer = [NSMutableDictionary new];
@@ -456,7 +465,10 @@ typedef enum : NSUInteger {
NSDictionary * callbackInfo = listeners[i];
NSString *callbackId = callbackInfo[@"callbackId"];
BOOL once = [callbackInfo[@"once"] boolValue];
- [[WXSDKManager bridgeMgr] callBack:self.instanceId funcId:callbackId params:userInfo[@"param"] keepAlive:!once];
+ NSMutableDictionary * retData = @{@"type":userInfo[@"eventName"],
+ @"module":callbackInfo[@"moduleName"],
+ @"data":userInfo[@"param"]};
+ [[WXSDKManager bridgeMgr] callBack:self.instanceId funcId:callbackId params:retData keepAlive:!once];
// if callback function is not once, then it is keepalive
if (once) {
NSMutableArray * moduleEventListener = [_moduleEventObservers[userInfo[@"moduleId"]] objectForKey:userInfo[@"eventName"]];
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83c747f3/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
index 3505a60..0bddbf9 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
@@ -9,6 +9,7 @@
#import <Foundation/Foundation.h>
#import "WXSDKInstance.h"
#import "WXComponentManager.h"
+#import "WXModuleMethod.h"
@interface WXSDKInstance ()
@@ -22,8 +23,8 @@
@property (nonatomic, readonly, strong) WXComponentManager *componentManager;
- (void)addModuleEventObservers:(NSString*)event callback:(NSString*)callbackId option:(NSDictionary*)option moduleClassName:(NSString*)moduleClassName;
-- (void)_addModuleEventObserversWithArguments:(NSArray*)arguments moduleClassName:(NSString*)moduleClassName;
+- (void)_addModuleEventObserversWithModuleMethod:(WXModuleMethod*)method;
- (void)removeModuleEventObserver:(NSString*)event moduleClassName:(NSString*)moduleClassName;
-- (void)_removeModuleEventObserverWithArguments:(NSArray*)arguments moduleClassName:(NSString*)moduleClassName;
+- (void)_removeModuleEventObserverWithModuleMethod:(WXModuleMethod*)method;
@end