2011-08-27 18 views
5

Jestem nowicjuszem w tym temacie. Mam div z niektórymi widżetami dojo wewnątrz. Używam ajax do przeładowania tego div, ale po tym moje widgety dojo się nie wyświetlają. Jak mogę sprawić, by moja przeglądarka ponownie ładowała widżety po zapytaniu ajaxowym. Nie chcę ponownie ładować całej strony.Załaduj ponownie widgety dojo po prośbie ajaxowej

Moje ajax część widok:

<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> 

Odśwież JQuery skryptu:

// 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

Polecam używać tylko jednej struktury na raz. Rozważ użycie xhrGet i xhrPost dla żądań Ajax. Czy używasz Firebug do debugowania? Gorąco polecam go użyć. – perissf

Odpowiedz

9

To dlatego, że widżety we fragmencie HTML zwróconego z serwera musi być analizowana zanim można wykazać w Strona. Na stronie głównej, prawdopodobnie masz kod jak poniżej:

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

konfiguracji parseOnLoad: true oznacza dojo analizuje całą stronę automatycznie po załadowaniu strony. Nie jest to prawdą, gdy używasz XHR, aby uzyskać inny fragment HTML z serwera. W tym przypadku musisz przeanalizować widgety ręcznie.

Użyj funkcji dojo.parse.parse do analizy drzewa węzłów DOM. Musisz więc wywołać tę funkcję po dodaniu fragmentu HTML do strony. Na przykład:

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

Trzeba pamiętać, że widżety zostały zniszczone przed ponowną aktualizacją strony, aby uniknąć wycieku pamięci. Funkcja dojo.parser.parse zwraca tablicę wszystkich obiektów analizowanych analizatorów. Zanim więc strona zostanie zaktualizowana ponownie, możesz iterować tę tablicę i niszczyć te widżety.

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

//Before update 
if (widgets) { 
    widgets.forEach(function(widget) { 
     widget.destroyRecursive(); 
    }); 
} 
Powiązane problemy