всплывающее окно начальной загрузки не работает в виджете ServiceNow

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

<script>
$(document).ready(function(){
    $('[data-toggle="popover"]').popover(); 

    $('.popover-dismiss').popover({
        trigger: 'focus'
        })
});
</script>  

Мой HTML выглядит так:

<span  class="list-group-item" ng-repeat="item in c.dates | orderBy:'date' track by $index" ng-if="item.displayList=='true' && item.futureDate">
        <li class="rowflex" style="list-style: none;">
          <div class="colflex">              
                <strong><i class="fa fa-calendar" aria-hidden="true"></i>&nbsp; {{item.date}}</strong>
            <p>{{item.date_name}}</p>
          </div>
          <a tabindex="0" class="glyphicon glyphicon-question-sign" role="button" data-toggle="popover" data-placement="right" data-trigger="focus" title="test" data-content="test"/>  
        </li>
      </span>

В настоящее время, когда я навожу курсор на глификоны вопросительного знака, я вижу «тест», но когда я нажимаю на него, ничего не происходит.

введите здесь описание изображения

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

введите здесь описание изображения

Какие-либо предложения?

Спасибо!


person Dave    schedule 08.08.2017    source источник
comment
У вас загружен скрипт для начальной загрузки?   -  person Oluwafemi Sule    schedule 08.08.2017
comment
нет, у меня есть это в HTML в тегах ‹script›‹/script›   -  person Dave    schedule 08.08.2017
comment
Вы должны добавить <script src="http://getbootstrap.com/dist/js/bootstrap.min.js"></script> сразу после разметки скрипта, который загружает jQuery.   -  person Oluwafemi Sule    schedule 08.08.2017
comment
Спасибо, поэтому я попробовал это для своих зависимостей в этом порядке, но не только всплывающее окно не работало, но и календарь исчез: cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js, getbootstrap.com/dist/js/bootstrap.min.js, cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js, cdnjs.cloudflare.com/ajax/libs/fullcalendar/ 3.4.0/   -  person Dave    schedule 09.08.2017
comment
Какую версию бутстрапа вы используете?   -  person Oluwafemi Sule    schedule 09.08.2017
comment
Привет, Олувафеми, я действительно не знаю, какая версия бутстрапа поставляется с ServiceNow, но я использовал всплывающее окно бутстрапа в других виджетах, и оно отлично работает. Я не уверен, почему это не работает для этого, в частности. Я также клонировал этот виджет, удалил ВСЕ, что связано с полным календарем, включая все зависимости, и он все равно отказывается работать. Не совсем уверен, что здесь происходит...   -  person Dave    schedule 09.08.2017


Ответы (2)


После многих попыток заставить его работать, я нашел решение. Вам нужно использовать Timeout.

Используйте один из следующих параметров в своем виджете.

Вариант 1 – клиентский сценарий (клиентский контроллер)

function ($scope, spUtil, $sce, $rootScope, $timeout) {
    $(document).ready(function(){
        setTimeout(function(){
            $('[data-toggle="popover"]').popover();
        },500);
    });
}

Вариант 2 — Функция ссылки

function() {
    $(document).ready(function(){
        setTimeout(function(){
            $('[data-toggle="popover"]').popover();
        },500);
    });
}

Пример: пример всплывающего окна

person user7297730    schedule 13.07.2018

Как правило, с сервисными порталами вы хотите избегать прямых вызовов jQuery и вместо этого использовать Angular. Ошибка, которую вы видите, вероятно, связана с этим.

Вы можете посмотреть BootstrapUI для Bootstrap + Angular, чтобы получить ссылку на некоторые из API, которые вы можете использовать здесь, но все же могут быть случайными.

Воспользуйтесь сервисом $uibModal, чтобы открыть модальное окно.

Отличным ресурсом, который я использовал, является https://serviceportal.io, в частности для вашего случая https://serviceportal.io/modal-windows-service-portal/.

Я протестировал их пример на нашем экземпляре в Стамбуле, и он сработал. Подводя итог этому сообщению, вот что вы можете попробовать в своем случае.

HTML-шаблон

<span class="list-group-item" ng-repeat="item in c.dates | orderBy:'date' track by $index" ng-if="item.displayList=='true' && item.futureDate">
    <li class="rowflex" style="list-style: none;">
        <div class="colflex">              
            <strong><i class="fa fa-calendar" aria-hidden="true"></i>&nbsp; {{item.date}}</strong>
            <p>{{item.date_name}}</p>
        </div>
        <a tabindex="0" class="glyphicon glyphicon-question-sign" role="button" data-toggle="popover" data-placement="right" data-trigger="focus" title="test" data-content="test" ng-click="c.openModal()" />  
    </li>
</span>

<script type="text/ng-template" id="modalTemplate">
    <div class="panel panel-default">
        <div class="panel-heading">
            <h4 class="panel-title">Modal Window</h4>
        </div>
        <div class="panel-body wrapper-xl">
            Hello
        </div>
        <div class="panel-footer text-right">
            <button class="btn btn-primary" ng-click="c.closeModal()">${Close Modal}</button>
        </div>
    </div>
</script>

Клиентский скрипт

function($uibModal, $scope) {
    var c = this;

    c.openModal = function() {
        c.modalInstance = $uibModal.open({
            templateUrl: 'modalTemplate',
            scope: $scope
        });
    }

    c.closeModal = function() {
        c.modalInstance.close();
    } 
}
person Kirk    schedule 09.08.2017
comment
Спасибо, Кирк, я попробовал, и, к сожалению, он все еще не работает. - person Dave; 11.08.2017
comment
Есть ли новая ошибка? Для случайного снимка перейдите на instance.service-now.com/cache.do (замените экземпляр на свой), чтобы очистить кеш сервера. Я уже видел вашу исходную ошибку, вызванную проблемами с кешем. - person Kirk; 11.08.2017