2015-07-17 5 views
1

J'ai commencé à utiliser des caractères dactylographiés avec angularjs. J'ai écrit une classe simple qui est responsable du comportement de glisser-déposer (ou sera à l'avenir). Mais en ce moment dans ma fonction handleDragEnd quand j'accéder à l'élément de toile J'obtiens l'erreurImpossible d'accéder à la variable de classe

Impossible de lire la propriété undefined

ci-dessous est mon code - si quelqu'un pouvait me dire ce que je fais mal, je serais reconnaissant.

class ToolBox { 
private canvas; 

constructor(canvas) 
{ 
    this.canvas = canvas; 

    $(".beacon").draggable({ 
     helper: 'clone', 
     cursor: 'pointer', 
     start: this.handleDragStart, 
     stop: this.handleDragEnd 
    });   
} 

handleDragStart() 
{ 
    console.log('Drag Started!'); 
} 

handleDragEnd() 
{    
    var pointer = this.canvas.getPointer(event.e); 

    console.log('Drag End!'); 
    return; 
} 
} 
+1

Au cas où vous ne l'avez pas déjà fait. Vous devriez vérifier [propriétés de paramètre] (https://github.com/Microsoft/TypeScript/wiki/Classes#parameter-properties). Ils sont une syntaxe agréable qui va supprimer quelques lignes dans votre code en faisant 'constructeur (toile privée)' –

Répondre

2

Puisque les méthodes de classe sont définies sur ToolBox.prototype, la valeur de this se perd lorsque vous passez dans les méthodes directement.

Change:

start: this.handleDragStart, 
stop: this.handleDragEnd 

Pour:

start:() => this.handleDragStart(), 
stop:() => this.handleDragEnd() 

Cela permettra de préserver la valeur de this en appelant les méthodes de l'instance.

+0

qui est parfait! Cela va me faciliter la vie :) –