addActor не является функцией
Я разрабатываю расширение для оболочки gnome. Моему расширению требуется ползунок для индикатора в области состояния. У меня были некоторые проблемы с его настройкой, я писал свой код по этой слегка устаревшей ссылке, основная проблема заключалась в том, что в исходном коде отсутствовал "PopupSliderMenuItem". Итак, я провел некоторое исследование и обнаружил, что оно было удалено. Этот коммит имеет больше информации.
Поэтому я попытался следовать этому (обновленному) коду при коммите:
this._slider = new Slider.Slider(0);
this._slider.connect('value-changed', Lang.bind(this, this._sliderChanged));
this._slider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange));
this.item = new PopupMenu.PopupBaseMenuItem({ activate: false });
this.item.addActor(this._slider.actor, { expand: true });
Я переделал этот код в свой проект, и он выглядит так:
this.slider = new Slider.Slider(0.5);
this.slider.connect('value-changed', Lang.bind(this, this._sliderChanged));
this.slider.connect('drag-end', Lang.bind(this, this._setNewColorTemperature));
this.sliderContainer = new PopupMenu.PopupBaseMenuItem();
this.sliderContainer.addActor(this.slider.actor, { expand: true });
this.menu.addMenuItem(this.sliderContainer);
Первый блок находится в исходном коде оболочки gnome (он устанавливает ползунок громкости). Мой код (второй блок) выбрасывает это исключение в строку "addActor":
Gjs-Message: JS LOG: Extension ****censored**** had error: TypeError: sliderContainer.addActor is not a function
У кого-нибудь есть идеи, почему эта ошибка происходит? Самое странное, что исходный код класса PopupBaseMenuItem имеет функцию, которую я вызываю.
Если вам нужна любая другая информация, которую я с удовольствием предоставлю.
1 ответ
Посмотрев больше внимания на исходный код, я обнаружил, что правильный способ установить актера - через свойство.actor.
Теперь мой код выглядит так (и работает):
this.slider = new Slider.Slider(0.5);
this.slider.connect('value-changed', Lang.bind(this, this._sliderChanged));
this.slider.connect('drag-end', Lang.bind(this, this._setNewColorTemperature));
this.sliderContainer = new PopupMenu.PopupBaseMenuItem();
this.sliderContainer.actor = this.slider.actor;
this.menu.addMenuItem(this.sliderContainer);