2014-07-07 2 views
0

Je développe une application hybride avec Worklight Ibm, en utilisant sencha touh pour l'interface utilisateur.TypeError: Objet # <Object> n'a pas de méthode

dans mon contrôleur j'appelle un HTTPAdapter comme ceci:

var invocationData = { 
    adapter : 'UserHttpAdapter', 
    procedure : 'getPersonneMorale', 
    parameters : [] 
}; 

WL.Client.invokeProcedure(invocationData, { 
    onSuccess : function() { 
     console.log('Signed in.'); 
     var loginView = this.getLoginView(); 
     mainMenuView = this.getMainMenuView(); 
     loginView.setMasked(false); 

     Ext.Viewport.animateActiveItem(mainMenuView, this 
       .getSlideLeftTransition()); 
    }, 
    onFailure : function(){ 
     console.log('failure'); 
    }, 
}); 

mais je reçois cette erreur:

07-07 11:43:45.812: E/NONE(31172): [http://<domain>:<port>/WLErsalMobileTest/apps/services/api/ErsalMobileTest/android/query] exception. TypeError: Object #<Object> has no method 'getLoginView' 
07-07 11:43:45.832: D/CordovaLog(31172): file:///android_asset/www/default/worklight/worklight.js: Line 3333 : Uncaught TypeError: Object #<Object> has no method 'getLoginView' 
07-07 11:43:45.832: E/Web Console(31172): Uncaught TypeError: Object #<Object> has no method 'getLoginView':3333 

Quand je suis l'exécution du code:

signInSuccess : function() { 
    console.log('Signed in.'); 
    var loginView = this.getLoginView(); 
    mainMenuView = this.getMainMenuView(); 
    loginView.setMasked(false); 

    Ext.Viewport.animateActiveItem(mainMenuView, this.getSlideLeftTransition()); 
}, 

sans appeler l'adaptateur cela fonctionne.

Pouvez-vous m'aider s'il vous plaît!

Merci

Répondre

0

Essayez de faire ce qui suit:

WL.Client.invokeProcedure.apply(this, [invocationData, callbackFunction]) 

où callbackFunction est le rappel que vous avez ci-dessus. Je pense que le problème est que la variable 'this' n'est pas spécifiée dans le contexte de rappel, donc en utilisant apply, vous spécifiez que 'this' devrait être la valeur que vous spécifiez. Essayez cela et voyez si cela fonctionne, même si je ne suis pas sûr que cela résoudra votre problème car je ne sais pas s'il utilisera le 'ceci' donné dans la fonction de rappel.

+1

Merci pour votre réponse. En fait, le problème était avec 'ceci'. J'ai fait une déclaration comme ça: var me = this; et puis utilisez-moi quand j'en ai besoin, et ça marche –

Questions connexes