MozillaPL.org - polskie centrum Mozilli

Główne menu:

XUL + RDF dziwny problem z odświeżaniem drzewa

Projektowanie aplikacji i rozszerzeń opartych na technologiach Mozilla Foundation: XUL, JavaScript, XPCOM, XBL i innych

Moderator: Pomocy?!

XUL + RDF dziwny problem z odświeżaniem drzewa

Postautor: krzyspia » 10 lipca 2006, 13:25

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4

Witam,

mam taki problem, stworzyłem sobie taką konstrukcję:
1) bazę danych na serwerze MySQL
2) Z bazy pod określonym adresem generuję sobie plik RDF
3) Z interfejsu napisanego w XULu sięgam sobie do pliku RDF i wyświetlam informacje z bazy danych w postaci prostego drzewa

4) Wszystko jest fajnie dopóki nie chcę odświeżyć sobie tego drzewa. To znaczy, za pomocą formularza zmieniam sobie w bazie informacje, a następnie za pomocą takiej funkcji:

Kod: Zaznacz cały
function ReloadTree(tree_name, datasource_url)
{
   //ReloadDatasource(datasource_url);

   var tree = document.getElementById(tree_name);
   //To summarize, the refresh method reloads the data, whereas the rebuild method reconstructs the content.
   tree.builder.refresh();//dane
   tree.builder.rebuild();//wygląd
}


ustawiłem interfejs tak aby po każdej zmianie drzewo się odświeżało (mam też guzik do ręcznego odświeżania) i wtedy dzieją się dziwne rzeczy:
a) Gdy dodaję nową pozycję wszystko jest ok - pozycja dodaje się na końcu listy
b) gdy usuwam: z listy znika usunięta pozycja i wszystkie po niej (w bazie są), dopiero odświeżenie ręczne powoduje, że na listę 'wracają' brakujące pozycje (z ostanią nie ma tego problemu)
c) gdy modyfikuję: znika napis modyfikowanej pozycji (zostaje jakby pusty wiersz w drzewie) i dopiero odświeżenie ręczne powoduje, że w wierszu pojawia się nowy właściwy napis.

Jeśli wiecie o co chodzi to bardzo będę wdzięczny za pomoc.

Informacje dodatkowe:

Ad 2. Generowanie pliku RDF (sądzę, że składnia jest prawidłowa)
Kod: Zaznacz cały
<?
include("inc/require.inc.php");
header('Content-type: text/rdf; charset=iso-8859-2');
//header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Expires: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");

$table_name = 'todo';

echo '<' . '?xml version="1.0" encoding="iso-8859-2" ?' . '>'."\n";
echo'<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n";
echo'xmlns:'.$table_name.'="http://www.moja.com/rdf/'.$table_name.'list#">'."\n";

print InsertValuesToRDF("SELECT * FROM todo;", $table_name);
      
echo'</RDF:RDF>';


Ad. 3. Fragment kodu XUL wyświetlającego drzewo.
Kod: Zaznacz cały
<tree flex="1" id="tree_todo" datasources="z_term_todo.rdf.php" ref="urn:todo:root">
   <treecols>
      <treecol id="term_todo_id_todo" label="id" hidden="true" />
      <treecol id="term_todo_fk_workers" label="fk_workers" hidden="true" />
      <treecol id="term_todo_description" label="Opis" flex="3"/>
      <treecol id="term_todo_deadline" label="deadline" flex="1" primary="true" class="sortDirectionIndicator" sort="rdf:http://www.moja.com/rdf/todolist#deadline"/>
      <treecol id="term_todo_is_done" label="zrobione?"/>
   </treecols>
   <template>
     <treechildren context="todo_context_menu">
      <treeitem uri="rdf:*">
        <treerow>
         <treecell label="rdf:http://www.moja.com/rdf/todolist#id_todo" />
         <treecell label="rdf:http://www.moja.com/rdf/todolist#fk_workers" />
         <treecell label="rdf:http://www.moja.com/rdf/todolist#description" />
         <treecell label="rdf:http://www.moja.com/rdf/todolist#deadline" />
         <treecell label="rdf:http://www.moja.com/rdf/todolist#is_done" />
        </treerow>
      </treeitem>
     </treechildren>
    </template>
</tree>

krzyspia
 
Posty: 13
Z nami od: 26 lutego 2004, 22:10

Postautor: krzyspia » 12 lipca 2006, 08:51

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4

Już sam doszedłem o co chodzi. Tak mi się przynajmniej wydaje. Mianowicie żądałem od drzewa aby odświeżyło się tuż po wysłaniu na serwer (do bazy MySQL) informacji o zmianie. Nie uwzględniłem, że przesłanie tej informacji oraz wygenrowanie na serwerze nowego pliku RDF trwa. Stworzyłem taką funkcję, która odświeża drzewo dwa razy i dopiero po chwili i działa!!

Kod: Zaznacz cały
function WaitAndReloadTree(tree_name, datasource_url)
{
   timeout_string="ReloadTree('"+tree_name+"', '"+datasource_url+"');";
   setTimeout(timeout_string,500);
   
   timeout_string="ReloadTree('"+tree_name+"', '"+datasource_url+"');";
   setTimeout(timeout_string,1000);
}
krzyspia
 
Posty: 13
Z nami od: 26 lutego 2004, 22:10


Wróć do Programowanie z użyciem technologii Mozilli

Kto jest online

Zarejestrowani użytkownicy: Bing [Bot]

Przejdź do powiązanej strony

Nawigacja:

Stopka: