2016-10-28 13 views
1

У меня есть 2 столбца Bootstrap (каждая ширина 6 из 12), одна из которых имеет несколько кнопок, одна справа содержит граф Cytoscape, инициализированный 5 узлами.Скрытый граф Cytoscape не может быть отображен позже

Первоначально, когда загрузка страницы завершена, график Cytoscape установлен в скрытое.

$('.cyto_div').hide(); 

Мое намерение заключается в том, что при нажатии кнопки «Показать» появляется график Cytoscape.

$('.cyto_div').show(); 

Однако появляется только панель, покрывающая граф Cytoscape, сам график не отображается. Когда я изменяю размер браузера, появляется Цитограф с 5 узлами.

Я подозреваю, что вы каким-то образом связаны с cy.resize(), но я не знаю, как и где это сделать.

Я ценю ваше решение очень много

Полный код здесь:

<!doctype html> 
<html> 
<head> 
<title>Cytoscape with Bootstrap</title> 
<script src="cytoscape.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 

<style type="text/css"> 
#cy 
{ 
     border: solid; 
     border-width: 1; 
     height: 500px;   
} 
</style> 

</head> 

<body> 

<div class="col-lg-6"> 
    <button id="remove">Remove node a</button> 
    <button id="show">Show the cytograph</button> 
</div> 

<div class="col-lg-6 cyto_div"> 

    <div class="panel panel-primary"> 
     <div class="panel-heading">Graph Area</div> 

     <div id="cy"> 
     <p> This area is for graph </p>    
     </div> 

     <p> End of cyto </p> 
     <button id = "test" class="btn  active" style="white-space:normal;"> Test adding a new node </button> 
    </div>  

</div> 

<script type="text/javascript"> 

$(document).ready(function() {  

var cy = cytoscape({ 
    wheelSensitivity: 0.05, 
    minZoom: 0.9, 
    maxZoom: 20, 
    container: document.getElementById('cy'), 
    elements: [{ data: { id: 'a' } }, 
       { data: { id: 'b' } }, 
       { data: { id: 'c' } }, 
       { data: { id: 'd' } }, 
       { data: { id: 'e' } }, 
       { 
       data: { 
        id: 'ab', 
        source: 'a', 
        target: 'b' 
       } 
      }], 
    style: [ 
      { 
       selector: 'node', 
       style: {       
        label: 'data(id)'       
       } 
      } 
      ] 
    }); 

$('.cyto_div').hide(); 

$('#test').on('click', function(e) { 

alert('Button clicked'); 
cy.add({ 
    group: "nodes", 
    data: { id: 'x' }, 
    position: { x: 190 , y: 190 } 
}); 
}); 

$('#show').on('click', function(e) { 

$('.cyto_div').show(); 
$('cy').show(); 
}); 
}); 
</script> 

</body> 
</html> 

ответ

1

Вы должны позвонить .resize() после шоу. Cytoscape может автоматически изменять размеры на несколько изменений стиля/замены, но не может их обнаружить. И некоторые внешние библиотеки (например, ваши вкладки) могут потенциально перезаписать размер после того, как Cytoscape автоматически исправит ситуацию.

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