Отмена выбора комбинированного списка в SAPUI5

Использование либо инъекции зависимостей , либо ленивая инициализация всегда предпочтительнее, как уже было подробно объяснено в других ответах.

Когда вы не хотите или не могут использовать эти шаблоны и для примитивных типов данных, есть три веские причины, по которым я могу подумать, почему предпочтительнее инициализировать атрибуты класса вне конструктора:

  1. избегать повторения = если вы имеют более одного конструктора, или когда вам нужно будет добавить больше, вам не придется повторять инициализацию снова и снова во всех телах конструкторов;
  2. улучшенная читаемость = вы можете легко сказать с первого взгляда какие переменные должны быть инициализированы извне класса,
  3. сокращенные строки кода = для каждой инициализации, сделанной при объявлении, в конструкторе будет меньше строки.
0
задан StErMi 16 January 2019 в 16:33
поделиться

2 ответа

Глядя на код SAP в GitHub в InputBase.js, новое значение уже записывается в свойство при запуске события, к которому вы присоединяетесь. Моим предложением было бы сохранить выбранное значение в переменной класса внутри вашего контроллера и вернуться к этому значению, как только пользователь отменит его для достижения вашей цели.

0
ответ дан pguddi 16 January 2019 в 16:33
поделиться

подход правильный (диалог внутри onChange), но вам нужно внести некоторые изменения. Когда SAPUI5 вызывает метод onChange, значение уже записывается внутри вашего элемента управления, поэтому oEvent.stopPropagation(); вообще ничего не делает.

Что вы можете сделать, это использовать метод ComboBox setSelectedItem(null), который должен сбросить текущий выбор (отменяя выбор пользователя).

ОБНОВЛЕНИЕ: Я обновил код, чтобы удовлетворить ваш запрос.

    __selectedItem: null,

    onChange: function (oEvent) {
        var that = this;
        var source = oEvent.getSource();
        var selectedItem = oEvent.getSource().getSelectedItem();
        MessageBox.show("Are you sure you want to do that?", {
            icon: MessageBox.Icon.Information,
            title: "Info",
            actions: [MessageBox.Action.YES, MessageBox.Action.NO],
            defaultAction: MessageBox.Action.NO,
            onClose: function (sButton) {
                if (sButton === MessageBox.Action.YES) {
                    //execute my logic in here => that works
                    that.__selectedItem = selectedItem;
                } else {
                    source.setSelectedItem( that.__selectedItem );
                }
            }
        });
    }
0
ответ дан StErMi 16 January 2019 в 16:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: