2012-08-03 10 views
6

muszę mieć jstree który jest konfigurowany z bazy danych i mam problemy z ikonami (jest to tylko kolejna kolumna w moim zapytania zawierającego nazwę ikony) . Problem polega na tym, że nie mogę wyświetlić go poprawnie.Jak ustawić niestandardową ikonę jstree ze źródła html

enter image description here

buduję tę listę dodając atrybut background-image:url('path'); wskazać obraz w tagu <a> ale wciąż otrzymuję wyświetlany że ikona folderu (obraz nie jest powtarzany, ale to go easyer wizualizacji problemu).

Jak mogę dokonać jstree aby nie wyświetlać tego folderu? Wygląda na to, że jstree tworzy tylko jeden obraz dla całego drzewa (lub przynajmniej każdego poziomu). Nie wiem, jak to zmienić.

To html dla powyższego obrazka.

<ul style=""><li id="1227_1226" class="leaf jstree-leaf"> 
<ins class="jstree-icon">&nbsp;</ins> 
      <a href="/arco/formatos/Estrategia desarrollo.doc" style="background-image:url('/arco/Menu/images/web.png;');" class="nothing"><ins class="jstree-icon">&nbsp;</ins> 
       Instructivo desarrollo 
      </a> 
     </li> 

     <li id="1227_1228" class="leaf jstree-leaf"><ins class="jstree-icon">&nbsp;</ins> 
      <a href="/arco/formatos/FO-0001 FormatoMantenimientoPlanificado-V1.doc" style="background-image:url('/arco/Menu/images/web.png;');" class="nothing"><ins class="jstree-icon">&nbsp;</ins> 
       Mantenimiento planificado 
      </a> 
     </li> 

     <li id="1227_1229" class="leaf"><ins class="jstree-icon">&nbsp;</ins> 
      <a href="/arco/formatos/FO-0002 FormatoAnalisisRequisitos.doc" style="background-image:url('/arco/Menu/images/web.png;');" class="nothing"><ins class="jstree-icon">&nbsp;</ins> 
       Análisis de requisitos 
      </a> 
     </li> 

     <li id="1227_1230" class="leaf jstree-leaf"><ins class="jstree-icon">&nbsp;</ins> 
      <a href="/arco/formatos/FO-0003 FormatoInstructivoInstalacion.doc" style="background-image:url('/arco/Menu/images/web.png;');" class="nothing"><ins class="jstree-icon">&nbsp;</ins> 
       Instructivo de instalación 
      </a> 
     </li> 

     <li id="1227_1231" class="leaf jstree-leaf"><ins class="jstree-icon">&nbsp;</ins> 
      <a href="/arco/formatos/FO-0004 FormatoControlCalidadConstruccion.doc" style="background-image:url('/arco/Menu/images/web.png;');" class="nothing"><ins class="jstree-icon">&nbsp;</ins> 
       Control de calidad 
      </a> 
     </li> 

     <li id="1227_1232" class="leaf jstree-leaf"><ins class="jstree-icon">&nbsp;</ins> 
      <a href="/arco/formatos/FO-0005 FormatoPruebasUsuario.doc" style="background-image:url('/arco/Menu/images/web.png;');" class="nothing"><ins class="jstree-icon">&nbsp;</ins> 
       Pruebas de usuario 
      </a> 
     </li> 

     <li id="1227_1233" class="leaf jstree-leaf"><ins class="jstree-icon">&nbsp;</ins> 
      <a href="/arco/formatos/FO-0007 FormatoActas-V1.doc" style="background-image:url('/arco/Menu/images/web.png;');" class="nothing"><ins class="jstree-icon">&nbsp;</ins> 
       Actas 
      </a> 
     </li> 

     <li id="1227_1263" class="leaf jstree-last jstree-leaf"><ins class="jstree-icon">&nbsp;</ins> 
      <a href="/arco/formatos/FO-0006 FormatoSolicitudSoporte V1.doc" style="background-image:url('/arco/Menu/images/web.png;');" class="nothing"><ins class="jstree-icon">&nbsp;</ins> 
       Solicitud de soporte 
      </a> 
     </li></ul> 

Tak buduję drzewo; Połączenia Ajax otrzymać listę HTML:

$(function() { 
    $("#arbolMenu").jstree({ 
     "plugins" : [ "themes", "html_data", "cookies"], 
     "html_data" : { 
      "ajax" : { 
       "url" : "/arco/CtrlMenu", 
       "data" : function (n) { 
        return { id : n.attr ? n.attr("id") : -1 }; 
       } 
      } 
     } 
    }); 
}).delegate(".jstree-open>a", "click.jstree", function(event){ 
    $.jstree._reference(this).close_node(this, false, false); 
}).delegate(".jstree-closed>a", "click.jstree", function(event){ 
    $.jstree._reference(this).open_node(this, false, false); 
}); 
+0

Co html wygląda? Wydaje się, że jest to bardziej pytanie css ... – Austin

+0

@Austin I zaktualizował pytanie. – Roger

Odpowiedz

8

Zamiast określania ikonę wyraźnie, użyj Types Plugin że pochodzi z jstree. Następnie dla każdego <li> w swoim html, przypisz jego właściwość rel do zdefiniowanego przez ciebie typu. Oto prosty przykład:

$(function() { 
    $("#demo1").jstree({ 
     "types" : { 
      "valid_children" : [ "web" ], 
      "types" : { 
       "web" : { 
        "icon" : { 
         "image" : "/arco/Menu/images/web.png" 
        }, 
       }, 
       "default" : { 
        "valid_children" : [ "default" ] 
       } 
      } 
     }, 
     "plugins" : ["themes","html_data","dnd","ui","types"] 
    }); 
}); 

tutaj jest urywek Próbka węzła drzewa html:

<li id="1227_1228" rel="web"> 
    <a href="some_value_here">Mantenimiento planificado</a> 
    <!-- UL node only needed for children - omit if there are no children --> 
    <ul> 
     <!-- Children LI nodes here --> 
    </ul> 
</li> 

Ponieważ określony rel="web" dla Ciebie <li> The <li> będą otrzymywać właściwości zdefiniowane dla danego typu web , która obejmuje niestandardową ikonę zdefiniowaną powyżej.

Aby uzyskać więcej informacji, można spojrzeć na oficjalnej dokumentacji jstree.

+1

Ma to być generowane z dowolnego ikony w bazie danych, więc w najgorszym przypadku, każdy węzeł może zawierać różne ikona zamiast być typem. Czy muszę wygenerować zestaw '' web ": { " ikona ": { " image ":" /arco/Menu/images/web.png " }, }," przy pierwszym ładowaniu drzewo? (wydaje się dość źle dla każdego ponownego załadowania/nawigacji), w jaki sposób sprawić, aby działał on w przypadku wywołań ajaxowych otrzymujących dane html? – Roger

+0

Zaktualizowałem moje pytanie, aby wyświetlić konstruktora, jeśli jest to istotne – Roger

0

Dodaj następujący kod CSS do dokumentu:

.jstree-icon { 
    display: none; 
} 
+0

Zaktualizowałem obraz. klasa '.jstree-icon' jest kropkowaną linią lub strzałką. Chcę je zachować. Dodając jeszcze tego nie usuwa foldery (które chcemy zachować w przypadku nie określić ikonę) – Roger

Powiązane problemy