oboejs: после ответа JSON ничего не происходит

avatar
Nagendra Singh
8 апреля 2018 в 09:45
199
1
3

JS:

function OrderFormController($scope, $http) {

$scope.sampleJSON = [];
$scope.sampleJSONDuplicates = [];
oboe('/getPMDResultsByDateAndSeverity')
   .done(function(data) {
    $scope.sampleJSON.push(data.pmdStructureWrapper);
    $scope.sampleJSONDuplicates.push(data.pmdDuplicates);
   })
   .fail(function() {

      console.log('error');
   });

}

html:

<body ng-app ng-controller="OrderFormController">

<div class="splash" ng-cloak="">
    <h2>Please wait, Loading Review Result</h2>
</div>


<div class="col-md-12 col-lg-12" ng-cloak="">
    <div class="panel with-nav-tabs panel-default">
        <div class="panel-heading">
            <ul class="nav nav-tabs">
                <li class="active"><a href="#tab1default" data-toggle="tab">Classes</a></li>
            </ul>
        </div>
        <div class="panel-body">
            <div class="tab-content">
                <div class="tab-pane fade in active" id="tab1default">
                    <ul class="col-md-12 col-lg-12">
                        <li ng-click="showErrorDetails(key)" class="col-sm-12 col-md-4 col-lg-4 eachClassCell"
                            ng-repeat='(key,value) in sampleJSON'>
                            <div ng-if="key.indexOf('.cls') > -1">
                                <div title="{{key}}" class="classNameLabel">{{key}}</div>
                                <div title="Error count" class="errorContainer">
                                    <span class="errorCount">{{value.pmdStructures.length}}</span>
                                    <span class="errorMeter"
                                          ng-repeat="eachClass in value.pmdStructures | limitTo: 10"></span>
                                </div>
                            </div>
                        </li>
                    </ul>
                </div>
        </div>
    </div>
</div>

<form>


</form>
<footer>
    <p>Salesforce Free Code Review, Copyright &copy; 2017</p>
    <p>Contact Us : <a href="mailto:****">Mail Us</a>
    </p>
</footer>
<script type="application/javascript">

    $(function() {
        $('.panel-body li').each(function() {
            if($.trim($(this).text()) === "") {
                $(this).hide();
            }
        });
    });


</script>
</body>

страница ничего не отображает. Есть ли что-то, что мне не хватает? Я знаю, что страница отображается раньше результата, но как мне ее повторно отобразить? Я должен сохранить его асинхронным, потому что, когда я размещаю свое приложение в героку, время ожидания вызова истекает (30000 мс), если я использую асинхронное false из ajax:

var jsonData = $.ajax({
        url: "/getPMDResultsByDateAndSeverity",
        dataType: "json",
        crossDomain: true,
        async: false
    }).responseText;

Кроме того, ему постоянно не хватает памяти кучи, как при использовании async false. Я модифицировал серверную часть, чтобы она работала на оптимальном уровне. При использовании async false : c.****.algo.MetadataLoginUtil : Всего затрачено времени 26825

После использования async true : что, как мне кажется, oboe.js внутренне делает:

c.****.algo.MetadataLoginUtil : Общее затраченное время 6321

Выше указано время, необходимое для получения ответа от сервера.

Источник
Rhumborl
8 апреля 2018 в 09:53
0

Вы пытались вызвать $scope.$apply() в конце метода done()? Асинхронный вызов в oboe находится за пределами angular, поэтому $apply указывает angular обновить пользовательский интерфейс.

Nagendra Singh
8 апреля 2018 в 09:57
0

Только что сделал, ничего не произошло.

Nagendra Singh
8 апреля 2018 в 10:00
0

Хорошо, только что изменил мой скрипт на этот: pmdDuplicates;$scope.$apply(); }) .fail(function() { console.log('error'); }); }

Nagendra Singh
8 апреля 2018 в 10:00
0

И это работало с применением. Не могли бы вы опубликовать это как ответ, чтобы я мог его принять.

Ответы (1)

avatar
Rhumborl
8 апреля 2018 в 10:06
0

Вам необходимо позвонить $scope.$apply() в конце done().

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

$scope.$apply() сообщает Angular, что область видимости изменилась, и поэтому нужно обновить отображение страницы. Этот вопрос и ответ объясняют это более подробно.

Nagendra Singh
8 апреля 2018 в 11:01
0

Здесь есть проблема, но когда я применяю все файлы, независимо от типа расширения, они появляются на вкладке, поскольку я написал индекс .cls> 1, он не соблюдает условие if и отображает поле без имени в теме. ссылка; Левая сторона, которая пуста, на самом деле является файлом .tigger.