2016-07-18 7 views
0

Ich habe zwei bearbeitbare Feature-Layer in meiner Anwendung, und ich versuche, den entsprechenden Attributinspektor anzuhängen, je nachdem, welchen Feature-Layer mein Benutzer bearbeiten möchte.Verwenden des gleichen InfoWindow für zwei AttributeInspectors

Ich erstelle die Attribute Inspectors für beide Feature-Layer, wenn meine Anwendung geladen wird, und hänge dann den entsprechenden Attributinspektor an das InfoWindow der Map an, wenn der Benutzer versucht, einen Feature-Layer zu bearbeiten.

Alles funktioniert gut, bis der Benutzer versucht, einen anderen Feature-Layer zu bearbeiten. Wenn ich versuche, einen anderen Attributinspektor an das Infofenster anzuhängen, wird es leer angezeigt.

Hier ist ungefähr das, was ich tue:

// AttributeEditor1 for FeatureLayer1 in Class1 

    constructor: function(options) { 
     this.options = lang.mixin(this.options, options); 
     this.map = options.map; 
     this.configureAttributeEditor1(); 
    }, 

    configureAttributeEditor1: function() { 

     this.attributeEditor1 = new AttributeInspector({ 
      layerInfos: layerInfos 
     }, domConstruct.create("div")); 

     // here I add a Save and Delete button and various event handlers 

     this.attributeEditor1.startup(); 

    }, 

    // I call this when I know that the user wants to edit FeatureLayer 1 
    attachEditor1: function() { 
      this.map.infoWindow.setContent(this.attributeEditor1.domNode); 
      this.map.infoWindow.resize(350, 240); 
    }, 

// AttributeEditor2 for FeatureLayer2 in Class2  

    constructor: function(options) { 
     this.options = lang.mixin(this.options, options); 
     this.map = options.map; 
     this.configureAttributeEditor2(); 
    }, 

    configureAttributeEditor2: function() { 

     this.attributeEditor2 = new AttributeInspector({ 
      layerInfos: layerInfos 
     }, domConstruct.create("div")); 

     // here I add a Save and Delete button and various event handlers 

     this.attributeEditor2.startup(); 

    }, 

    // I call this when I know that the user wants to edit FeatureLayer 2 
    attachEditor2: function() { 
      this.map.infoWindow.setContent(this.attributeEditor2.domNode); 
      this.map.infoWindow.resize(350, 240); 
    },  

Vielen Dank im Voraus.

+0

Meinst du AttributeEditor1 funktioniert und AttributeEditor2 nicht? –

+0

AttributeEditor1 funktioniert, bis ich den Inhalt des InfoWindow der Karte zu AttributeEditor2 vertausche. Wenn ich dann versuche, AttributeEditor1 erneut dem InfoWindow hinzuzufügen, ist es leer. – awm

Antwort

0

Wenn Sie den Inhalt von infoWindow mit map.infoWindow.setContent aktualisieren, wird der vorherige Inhalt zerstört und der neue Inhalt aktualisiert. Im Grunde wird Ihr AttributeInspector1 zerstört, wenn Sie das Info-Fenster mit AttributeInspector2 aktualisiert haben.

Sie müssen nicht mehrere AttributeInspector erstellen, während Sie an mehreren FeatureLayern arbeiten. Die Eigenschaft layerInfos ist ein Array-Typ, Sie können upd mehrere Ebenen festlegen.

Aber ich denke, Sie haben verschiedene Bedürfnisse/Maßnahmen zu treffen, wenn Sie zwischen den Schichten wechseln. Das Beste, was Sie tun können, ist entweder neue AttributeInspector bei jedem Wechsel zu erstellen, oder nur die layerInfos zu aktualisieren und Ereignisse zu speichern und zu löschen. Stellen Sie sicher, dass Sie die vorherigen Ereignishandles zum Speichern und Löschen entfernen.