2016-09-05 3 views
4

Je souhaite empêcher un utilisateur de créer plus d'une forme sur la carte. Par exemple, si l'utilisateur crée un polygone, toutes les icônes de forme de la barre d'outils doivent être désactivées. Lorsque l'utilisateur supprime la forme créée précédemment, les icônes de la barre d'outils doivent être activées.Désactiver la barre d'outils Dessiner une feuille lorsque l'utilisateur crée une forme et l'activer lorsque la forme est supprimée

Comment est-ce que je peux faire ceci? J'ai essayé de supprimer la barre d'outils sur l'événement draw: created et d'ajouter une nouvelle barre d'outils sur dessiner: événement supprimé mais cela conduit à des erreurs (voir capture d'écran ci-jointe).

Error screenshot

Répondre

3

Brochure permet de supprimer et ajouter les barres d'outils avec remove() et addTo() méthodes.

Ce que vous devez faire est de créer deux barres d'outils. L'un est un défaut L.Control.Draw et l'autre est sans la composante « dessiner »:

self.drawControlFull = new L.Control.Draw(); 

self.drawControlEdit = new L.Control.Draw({ 
    edit: { 
    featureGroup: editableLayers, 
    edit: false 
    }, 
    draw: false 
}); 

map.addControl(drawControlFull); 

Ensuite, vous écoutez juste les événements draw:created et draw:deleted et vous ajoutez/supprimez-les au besoin:

map.on('draw:created', function(e) { 
    var type = e.layerType, 
    layer = e.layer; 

    self.drawControlFull.remove(); 
    self.drawControlEdit.addTo(map); 

    editableLayers.addLayer(layer); 
}); 

map.on('draw:deleted', function (e) { 
    self.drawControlEdit.remove(); 
    self.drawControlFull.addTo(map); 
}); 

Cette solution ne couvre peut-être pas tous les cas d'utilisation mais c'est juste un exemple. J'ai également créé un jsFiddle pour cela afin que vous puissiez voir comment cela fonctionne.

+0

J'avais essayé cette approche plus tôt. Mais je recevais l'erreur montrée dans la capture d'écran ci-jointe. (J'ai mis à jour la question) – codejunkie

+0

Pouvez-vous peut-être créer un jsFiddle et reproduire votre erreur (essayez de mettre à jour le mien)? Ma solution fonctionne avec la dernière version du dépliant et du dépliant. Peut-être que vous utilisez une version plus ancienne. Si c'est le cas, vous devez changer deux choses, mais c'est similaire. –

+0

Voici comment vous pouvez le dupliquer dans votre code. Créer une forme Puis cliquez sur modifier -> vous obtenez une erreur. Puis cliquez sur annuler -> vous obtenez une autre erreur. (Utiliser le débogueur chrome) – codejunkie