2015-07-20 3 views
0

Возможно ли открыть окно после выполнения скрипта expandNextLevel()? Я спрашиваю об этом, потому что я не хочу, чтобы клиент видел анимацию expand/collapse, но только древовидная структура рухнула. Это мой код.Открыть окно после выполнения сценария

<script type="text/javascript"> 
    $(function() { 

     $(".k-gantt").click(function() { 

      expandNextLevel();   


      var windowWidget = $("#window"); 

       windowWidget.data("kendoWindow").open().center(); 

       $.ajax({ 
        type: 'GET', 
        url: '/Act/load', 
        contentType: 'application/json; charset=utf-8', 

        success: function (result) { 
        }, 
        error: function (err, result) { 
         alert("Error" + err.responseText); 
        } 
       }); 





     function expandNextLevel() 
     { 
      setTimeout(function() { 
       var treeview = $("#treeview").data("kendoTreeView"); 

       var b = $('.k-item .k-plus').length; 
       treeview.expand(".k-item"); 
       treeview.trigger('dataBound'); 
       if (b > 0) { 
        expandNextLevel(); 
        collapseNextLevel(); 
       } 
      } 
      , 200); 
     }; 

     function collapseNextLevel() 
     {    
      setTimeout(function() { 
       var treeview = $("#treeview").data("kendoTreeView"); 
       var b = $('.k-item .k-minus').length; 
       treeview.collapse(".k-item"); 
       treeview.trigger('dataBound'); 
       if (b > 0) { 
        collapseNextLevel(); 
       } 
      } 
      , 200); 
     }; 

    </script> 

С уважением

ответ

0

Я думаю, что самый быстрый способ сделать что-то вроде этого поставить все в скрытом DIV, которым вы затем показать, когда вы закончите с выполнением кода. Вы также можете поместить видимый div с вращающимся значком во время выполнения кода и скрыть его, когда вы показываете основной контент, чтобы пользователи знали, что что-то происходит.

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

<script type="text/javascript"> 
$(function() { 

    $(".k-gantt").click(function() { 

     expandNextLevel(0);   


     var windowWidget = $("#window"); 

      windowWidget.data("kendoWindow").open().center(); 

      $.ajax({ 
       type: 'GET', 
       url: '/Act/load', 
       contentType: 'application/json; charset=utf-8', 

       success: function (result) { 
       }, 
       error: function (err, result) { 
        alert("Error" + err.responseText); 
       } 
      }); 





    function expandNextLevel(var i) 
    { 
     i++; 
     setTimeout(function() { 
      var treeview = $("#treeview").data("kendoTreeView"); 

      var b = $('.k-item .k-plus').length; 
      treeview.expand(".k-item"); 
      treeview.trigger('dataBound'); 
      if (b > 0) { 
       expandNextLevel(i); 
       collapseNextLevel(); 
      } 
      if (i == 1) 
      { 
       $.("#maincontent").show(); 
      } 
     } 
     , 200); 
    }; 


    function collapseNextLevel() 
    {    
     setTimeout(function() { 
      var treeview = $("#treeview").data("kendoTreeView"); 
      var b = $('.k-item .k-minus').length; 
      treeview.collapse(".k-item"); 
      treeview.trigger('dataBound'); 
      if (b > 0) { 
       collapseNextLevel(); 
      } 
     } 
     , 200); 
    }; 

</script> 

Вы должны поставить вас содержимое внутри DIV

<div id="maincontent" style="display:none;"> 
    /*your content*/ 
</div> 

Я не проверял, но он должен работать :)

Существует лучший способ сделать это с jQuery.when , jQuery.done и обещания, но я не уверен, что могу дать вам рабочий образец, так как я никогда не использовал эти методы.

+0

Могли бы вы предоставить рабочий образец первого? – ArDevTeam

+0

@ArDevTeam обновил мой ответ. Код не очень изящный, хотя –

+0

, к сожалению, он не работает, ни метод .when, который я уже пробовал раньше. – ArDevTeam