J'ai essayé d'envelopper ma tête autour de celui-ci, et beaucoup de tutoriels et de sites ont suggéré la création d'un objet événement distinct, qui semble être un peu d'overkill pour simplement mettre en œuvre une fonction à un moment donné dans l'objet.Javascript personnalisé "événement" écouteur, en utilisant l'implémentation du prototype OOP
Fondamentalement, je veux qu'un événement "onComplete" personnalisé se déclenche lorsque certaines méthodes sont appelées dans l'objet utilisé. J'ai un objet de contrôle GMaps qui est activé ou désactivé. Quand il est activé, il permet de manipuler les polylignes sur la carte, mais lorsqu'il est désactivé, il désactive la manipulation, à quel point je voudrais que les données de la polyligne soient stockées. Ce que je tente de faire est d'autoriser les utilisateurs de l'objet à créer leur propre événement pour écouter l'événement désactivé et leur permettre d'accéder aux données de polyligne de cet objet. Comment puis je faire ça?
Ceci est mon code jusqu'ici:
function ToggleLineDrawControl() {}
ToggleLineDrawControl.prototype = new GControl();
ToggleLineDrawControl.prototype._on = false;
ToggleLineDrawControl.prototype._button = false;
ToggleLineDrawControl.prototype._map = false;
ToggleLineDrawControl.prototype._overlay = false;
ToggleLineDrawControl.prototype._plots = [];
ToggleLineDrawControl.prototype._line = false;
ToggleLineDrawControl.prototype._addPlotListener = false;
ToggleLineDrawControl.prototype._onComplete = false;
ToggleLineDrawControl.prototype.initialize = function(map) {
this._map = map;
var me = this;
var container = document.createElement('div');
var buttonDiv = document.createElement('div');
this._button = buttonDiv;
this.setButtonStyle_();
container.appendChild(this._button);
this._button.appendChild(document.createTextNode('Plot'));
GEvent.addDomListener(this._button, 'click', function() {
if(!this._on) {
this.style.backgroundColor = '#333333';
this.style.color = 'white';
this.firstChild.nodeValue = 'Done';
me.startPlotting();
this._on = true;
} else {
this.style.backgroundColor = 'white';
this.style.color = '#333333';
this.firstChild.nodeValue = 'Plot'
me.stopPlotting();
this._on = false;
}
});
this._map.getContainer().appendChild(container);
return container;
};
ToggleLineDrawControl.prototype.getDefaultPosition = function() {
return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 57));
};
ToggleLineDrawControl.prototype.setButtonStyle_ = function() {
this._button.style.textDecoration = 'none';
this._button.style.color = '#333333';
this._button.style.backgroundColor = 'white';
this._button.style.font = 'small Arial';
this._button.style.border = '1px solid black';
this._button.style.padding = '2px';
this._button.style.marginBottom = '3px';
this._button.style.textAlign = 'center';
this._button.style.width = '5em';
this._button.style.cursor = 'pointer';
};
ToggleLineDrawControl.prototype.setPlot = function(latlng) {
var wicon = new GIcon();
wicon.image = 'http://www.site.com/images/waypoint2.png';
wicon.iconSize = new GSize(32, 32);
wicon.iconAnchor = new GPoint(8, 28);
var marker = new GMarker(latlng, {icon: wicon});
this._map.addOverlay(marker);
this._plots.push(latlng);
this.drawLines();
};
ToggleLineDrawControl.prototype.drawLines = function() {
var numPlots = this._plots.length;
if(this._line != false) {
this._map.removeOverlay(this._line);
}
if(numPlots > 1) {
this._line = new GPolyline(this._plots, '#cc0000', 2, 0.75);
this._map.addOverlay(this._line);
}
}
ToggleLineDrawControl.prototype.startPlotting = function() {
var me = this;
this._addPlotListener = GEvent.addListener(this._map, 'click', function(o, l, ol) {
me.setPlot(l);
});
};
ToggleLineDrawControl.prototype.stopPlotting = function() {
GEvent.removeListener(this._addPlotListener);
};
ToggleLineDrawControl.prototype.onComplete = function(callback) {
this._onComplete = callback // get this to somehow be listener event method
};
James, Merci pour votre réponse. Désolé, pour confondre les choses, mais que la méthode onComplete() et son utilisation dans l'objet paresseusement laissé inachevé, parce que je ne savais pas où le prendre. Dans l'utilisation de cet objet, je veux le déclarer, puis assigner une méthode personnalisée pour utiliser la portée de l'objet, afin d'être utilisé à la fois qu'une autre des méthodes de l'objet est utilisée. Ma première pensée était l'exécution de la méthode personnalisée une fois qu'une méthode comme stopPlotting() a été exécutée. – qualsh