OpenLayers Event model ###################### Every object has predefined event types, which can be assigned to particular function in defined *scope*. When you write your custom code, you can define your own events and register them, using .. code-block:: javascript this.events = new OpenLayers.Events(this, this.div, ["event1","event2"]); For example object :class:`OpenLayers.Map`, has several predefined events: **preaddlayer** triggered before a layer has been added. The event object will include a *layer* property that references the layer to be added. **addlayer** triggered after a layer has been added. The event object will include a *layer* property that references the added layer. **removelayer** triggered after a layer has been removed. The event object will include a *layer* property that references the removed layer. **changelayer** triggered after a layer name change, order change, or visibility change (due to resolution thresholds). Listeners will receive an event object with *layer* and *property* properties. The *layer* property will be a reference to the changed layer. The *property* property will be a key to the changed property (name, visibility, or order). **movestart** triggered after the start of a drag, pan, or zoom **move** triggered after each drag, pan, or zoom **moveend** triggered after a drag, pan, or zoom completes **zoomend** triggered after a zoom completes **addmarker** triggered after a marker has been added **removemarker** triggered after a marker has been removed **clearmarkers** triggered after markers have been cleared **mouseover** triggered after mouseover the map **mouseout** triggered after mouseout the map **mousemove** triggered after mousemove the map **dragstart** Does not work. Register for movestart instead. **drag** Does not work. Register for move instead. **dragend** Does not work. Register for moveend instead. **changebaselayer** triggered after the base layer changes :class:`OpenLayers.Layer` has: **loadstart** Triggered when layer loading starts. **loadend** Triggered when layer loading ends. **loadcancel** Triggered when layer loading is canceled. **visibilitychanged** Triggered when layer visibility is changed. **move** Triggered when layer moves (triggered with every mousemove during a drag). **moveend** Triggered when layer is done moving, object passed as argument has a zoomChanged boolean property which tells that the zoom has changed. and :class:`OpenLayers.Layer.Vector` adds: **beforefeatureadded** Triggered before a feature is added. Listeners will receive an object with a *feature* property referencing the feature to be added. To stop the feature from being added, a listener should return false. **beforefeaturesadded** Triggered before an array of features is added. Listeners will receive an object with a *features* property referencing the feature to be added. To stop the features from being added, a listener should return false. **featureadded** Triggered after a feature is added. The event object passed to listeners will have a *feature* property with a reference to the added feature. **featuresadded** Triggered after features are added. The event object passed to listeners will have a *features* property with a reference to an array of added features. **beforefeatureremoved** Triggered before a feature is removed. Listeners will receive an object with a *feature* property referencing the feature to be removed. **featureremoved** Triggerd after a feature is removed. The event object passed to listeners will have a *feature* property with a reference to the removed feature. **featuresremoved** Triggered after features are removed. The event object passed to listeners will have a *features* property with a reference to an array of removed features. **featureselected** Triggered after a feature is selected. Listeners will receive an object with a *feature* property referencing the selected feature. **featureunselected** Triggered after a feature is unselected. Listeners will receive an object with a *feature* property referencing the unselected feature. **beforefeaturemodified** Triggered when a feature is selected to be modified. Listeners will receive an object with a *feature* property referencing the selected feature. **featuremodified** Triggered when a feature has been modified. Listeners will receive an object with a *feature* property referencing the modified feature. **afterfeaturemodified** Triggered when a feature is finished being modified. Listeners will receive an object with a *feature* property referencing the modified feature. **vertexmodified** Triggered when a vertex within any feature geometry has been modified. Listeners will receive an object with a *feature* property referencing the modified feature, a *vertex* property referencing the vertex modified (always a point geometry), and a *pixel* property referencing the pixel location of the modification. **sketchstarted** Triggered when a feature sketch bound for this layer is started. Listeners will receive an object with a *feature* property referencing the new sketch feature and a *vertex* property referencing the creation point. **sketchmodified** Triggered when a feature sketch bound for this layer is modified. Listeners will receive an object with a *vertex* property referencing the modified vertex and a *feature* property referencing the sketch feature. **sketchcomplete** Triggered when a feature sketch bound for this layer is complete. Listeners will receive an object with a *feature* property referencing the sketch feature. By returning false, a listener can stop the sketch feature from being added to the layer. **refresh** Triggered when something wants a strategy to ask the protocol for a new set of features. and so on. If we want to `do something `_, when new feature is added to the vector layer, it is simple: .. code-block:: javascript var vlayer = new OpenLayers.Layer.Vector("Vector layer"); var onFeatureAdd = function(e) { // do something // 'this' (scope) is {self: object, layer: vector layer} }; vlayer.events.register("featureadded",{"self":this,layer:vlayer},onFeatureAdd);