Uncaught TypeError: Cannot read property 'hasOwnProperty' undefined
Je suis en utilisant fabric.js pour dessiner du texte sur une toile. J'ai une fonction pour créer une étiquette de texte. J'aimerais avoir des étiquettes d'exécuter une fonction quand ils sont sélectionnés. La syntaxe est la label.on('selected', functionToCall());
Cela fonctionne très bien quand je fais la fonction anonyme intérieur de la fonction, mais quand je me casse comme une fonction distincte, je reçois un Uncaught TypeError: Cannot read property 'hasOwnProperty' of undefined
. Ce que je fais mal?
Ci-dessous est le code qui ne fonctionne pas pour moi. Voici la de code cassé sur jsfiddle, et une version d'un fonction anonyme qui fonctionne.
"use strict";
var canvas = new fabric.Canvas('c', {selection: false}),
position = 50;
function onLabelSelection(theLabel) {
if (theLabel.hasOwnProperty('edge')) {
selectedEdge = theLabel.edge;
} else {
selectedEdge = null;
}
}
function createLabel() {
var label;
label = new fabric.Text('Hello World', {
left: position,
top: position
});
position += 50;
label.edge = null;
label.on('selected', onLabelSelection(this));
return label;
}
canvas.on('mouse:up', function() {
var newLabel = createLabel();
canvas.add(newLabel);
});
Vous devez vous connecter pour publier un commentaire.
Pas. La syntaxe pour les gestionnaires d'événements est à passer la fonction de gestionnaire, de ne pas l'appeler:
Vous pourriez vouloir essayer
label.on('selected', onLabelSelection.bind(this))
ou - depuisthis
à l'intérieur decreateLablel
est apparemmentundefined
- justelabel.on('selected', onLabelSelection)
.this
que vous avez passé aurait été lewindow
, et vous n'auriez pas une erreur, mais juste étrange comportement...