2011-08-27 20 views
5

Soy un novato en este tema. Tengo div con algunos widgets de dojo dentro. Uso ajax para volver a cargar este div, pero después de esto mis widgets de dojo no se muestran. ¿Cómo puedo hacer que mi navegador vuelva a cargar los widgets después de la solicitud de ajax? No quiero volver a cargar toda la página.Recargar widgets de dojo después de la solicitud de ajax

Mi ajax vista parcial:

<div dojoType="dijit.layout.BorderContainer" gutters="true" id="borderContainerTwo"> 
<?php foreach($wynik as $row): ?> 
    <div dojoType="dijit.layout.ContentPane" region="center" splitter="false"> 
     <p id="category"><img src="/photo/category/<?php echo $row->idPropozycji;?>.jpg" width="100" height="130" style="float: left;"></p> 
     <?php echo $row->opis; ?> 
    </div> 

    <div dojoType="dijit.layout.AccordionContainer" id="leftAccordion" region="leading" splitter="true"> 
     <div dojoType="dijit.layout.AccordionPane" title="Title"> 
      <h3><?php echo $row->nazwa2; ?></h3> 
     </div> 

     <div dojoType="dijit.layout.AccordionPane" title="Place"> 
      <?php echo $row->place;?> 
     </div> 

    </div>   
<?php endforeach;?> 
</div> 

Recargar jQuery guión:

// Functon to Show out Busy Div 
function showBusy(){ 
$('#ajax-content').block({ 
    message: '<h1>Wczytuje dane</h1>', 
    css: {border:'3px solid #FFF'} 
}); 
} 

function updatePage(html){ 

window.setTimeout(function(){ 
    $('#ajax-content').html(html); 
}, 2000) 


} 


$(document).ready(function() { 

// $.AJAX Example Request 
$('.ajax-pag > li a').live('click', function(eve){ 
    eve.preventDefault(); 

    var link = $(this).attr('href'); 
    console.log(link); 
    $.ajax({ 
     url: link, 
     type: "GET", 
     dataType: "html", 
     beforeSend: function(){ 
      showBusy(); 
     }, 
     success: function(html) { 
      updatePage(html); 
     } 
     }); 


});  


}); 
+0

Recomiendo utilizar solo un marco a la vez. Considere usar xhrGet y xhrPost para solicitudes de Ajax. ¿Utiliza Firebug para la depuración? Recomiendo usarlo. – perissf

Respuesta

9

Esto se debe a los widgets en el fragmento HTML devuelto desde el servidor necesita ser analizada primero antes de que se pueda demostrar en la página. En su página principal, es probable que tenga un código como a continuación:

<script type="text/javascript" src="../javascripts/dojo1.6/dojo/dojo.js" 
djConfig="parseOnLoad: true"></script> 

La configuración parseOnLoad: true significa dojo analiza toda la página automáticamente después de que se carga la página. Esto no es cierto cuando usa XHR para obtener otro fragmento de HTML del servidor. Necesita analizar los widgets de forma manual en este caso.

Utilice la función dojo.parse.parse para analizar un árbol de nodos DOM. Entonces, lo que debe hacer es invocar esta función después de que el fragmento de HTML se haya agregado a la página. Por ejemplo,

$('#ajax-content').html(html);  
dojo.parser.parse(dojo.byId('ajax-content')); 

Una cosa que hay que tener en cuenta es asegurarse de que los reproductores se han destruido antes de que la página se actualiza de nuevo para evitar la pérdida de memoria. La función dojo.parser.parse devuelve una matriz de todos los objetos de widgets analizados. Entonces, antes de que la página se actualice nuevamente, puede iterar esta matriz y destruir estos widgets.

//Save the last parsed result 
var widgets = dojo.parse.parse(); 

//Before update 
if (widgets) { 
    widgets.forEach(function(widget) { 
     widget.destroyRecursive(); 
    }); 
} 
Cuestiones relacionadas