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);
Другие вопросы по тегам