Использование одного и того же InfoWindow для двух AttributeInspectors

У меня есть два редактируемых векторных слоя в моем приложении, и я пытаюсь присоединить соответствующий инспектор атрибутов в зависимости от того, какой векторный слой пытается редактировать мой пользователь.

Я создаю инспекторы атрибутов для обоих векторных слоев при загрузке приложения, а затем присоединяю соответствующий инспектор атрибутов к информационному окну карты, когда пользователь пытается редактировать векторный слой.

Все работает хорошо, пока пользователь не попытается редактировать другой векторный слой. Когда я пытаюсь прикрепить другой инспектор атрибутов к информационному окну, оно просто появляется пустым.

Вот примерно то, что я делаю:

 // 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);
    },      

Заранее спасибо.

1 ответ

При обновлении содержимого infoWindow с помощью map.infoWindow.setContent, он уничтожает предыдущий контент, а затем обновляет новый контент. Поэтому в основном ваш AttributeInspector1 будет уничтожен, когда вы обновите информационное окно с помощью AttributeInspector2.

Вам не нужно создавать несколько AttributeInspector, работая над несколькими FeatureLayer. layerInfos Свойство является типом массива, вы можете установить обновление нескольких слоев.

Но, я думаю, у вас есть разные потребности / действия, которые нужно предпринимать при переключении между слоями. Лучшее, что вы можете сделать, это либо создавать новый AttributeInspector при каждом переключении, либо просто обновлять layerInfos и сохранять и удалять события. Убедитесь, что вы удалили предыдущее сохранение и удалите дескрипторы событий.

Другие вопросы по тегам