Comment changer l'icône en jstree?

j'ai le code suivant:

$('.wpFolders.co_files').bind('select_node.jstree', function (event, data) {
            getFileById(data.args[0].hash.replace('#', ''));
        }).jstree({
            'plugins' : ['html_data','themes','ui','types'],
            'ui' : {
                'select_limit' : 1
            },
            'core' : {
                'animation' : 0
            },
            'types': {
                'default' : {
                    'icon' : {
                        'image' : '/admin/views/images/file.png'
                    }
                }
            }
        });

j'ai une base de liste non ordonnée, je voudrais afficher une liste de fichiers. J'essaie d'utiliser les "types" pour changer l'icône mais je ne peux pas pour la vie de moi comprendre comment le faire. J'ai vérifié leurs docs lien et même en utilisant un code presque identique, rien ne semble se produire.

D'après ma compréhension du code au-dessus du type par défaut de mon arbre devrait avoir l'icône que j'ai spécifié mais rien n'arrive, tout ce que je reçois est l'icône de dossier par défaut.

des idées? Désolé si la question semble basique mais je trouve la documentation difficile à suivre en essayant de faire des choses basiques. :)

24
demandé sur jeev 2011-08-23 18:04:22

10 réponses

j'ai pu remplacer plusieurs icônes en utilisant le CSS suivant, sans utiliser le plugin Types. Espérons que cela aide quelqu'un d'autre!

    /* replace folder icons with another image, remove leaf image */        
    li.jstree-open > a .jstree-icon {background:url("imageOpen.gif") 0px 0px no-repeat !important;}
    li.jstree-closed > a .jstree-icon {background:url("imageClosed.gif") 0px 0px no-repeat !important;}
    li.jstree-leaf > a .jstree-icon { display: none; }


    /* replace checkbox icons */
    li.jstree-unchecked > a .jstree-checkbox, li.jstree-undetermined > a .jstree-checkbox 
    {
        background:url("uncheckedImage.png") 0px 0px no-repeat !important;
        width: 32px;
        height: 29px;
        padding-top: 5px;
    }
    li.jstree-checked > a .jstree-checkbox
    {
        background:url("checkedImage.png") 0px 0px no-repeat !important;
        width: 32px;
        height: 29px;
        padding-top: 5px;
    }
22
répondu http203 2011-08-26 19:16:49

Après un mal de tête... J'ai trouvé une solution.


    <li data-jstree='{"icon":"path/file.png"}'></li>

je suggère d' ne pas modifier le code css.

PS le plug-in "types" n'est pas nécessaire.

18
répondu FabioSorre 2014-03-10 15:39:25

Deux problèmes:

  1. j'avais besoin d'ajouter le "type" dans mon attribut rel de mes objets list (j'ai créé un défaut et un type de fichier).
  2. j'ai oublié un niveau dans mon tableau déclarant les types, le code devait être comme ceci:

    $('.wpFolders.co_files').bind('select_node.jstree', function (event, data) {
        getFileById(data.args[0].hash.replace('#', ''));
    }).jstree({
        'plugins' : ['html_data','themes','ui','types'],
        'ui' : {
            'select_limit' : 1
        },
        'core' : {
            'animation' : 0
        },
        'types': {
            'types' : {
                'file' : {
                    'icon' : {
                        'image' : '/admin/views/images/file.png'
                    }
                },
                'default' : {
                    'icon' : {
                        'image' : '/admin/views/images/file.png'
                    },
                    'valid_children' : 'default'
                }
            }
    
        }
    });
    

Je ne comprends pas vraiment pourquoi mon code se brise dans le WYSIWYG, désolé si c'est laid. De toute façon, j'espère que cela peut aider quelqu'un.

14
répondu Gazillion 2011-09-14 20:41:42

Vous pouvez changer l'icône avec la nouvelle API, sans HTML, CSS, ou plugins.

$("#tree").jstree(true).set_icon(nodeId, "/images/blabla.png");
11
répondu Henrik 2017-07-21 19:51:16

Pour masquer l'icône de dossier, utilisez la commande suivante:

<style type="text/css">
 .jstree li > a > .jstree-icon {  display:none !important; } 
</style>
8
répondu Mike 2012-12-24 19:01:21

jstree inclut sa propre icône de fichier( en plus de l'icône de dossier par défaut), ajouter 'icon': 'jstree-file' propriété au noeud pour le montrer

4
répondu Severian 2014-08-22 17:40:18

La façon de changer l'icône en fonction du niveau:

jQuery('#tree-edit').on('changed.jstree', function(e, data) {

      //do something
    }).on("open_node.jstree", function(event, data) {
        jQuery.each(data.instance._model.data, function(key, val) {
            console.log(key + ", " + val);
           if (key.length < 4 || key=='#') {
               jQuery.jstree.reference("#tree-edit").set_type(val, "selectable");
           }
        });
    }).on("loaded_node.jstree", function(event, data) {
        console.log(data);

    }).jstree({
        'plugins': ["search", "types"],
        'core': {
            'data': {
                'url': 'http://www.google.com/json',
                'data': function(node) {
                    return {'id': node.id};
                }
            }
        },
        'types': {
            'selectable': {
                'icon': 'http://elpidio.tools4software.com/images/icon-ok-small.png'
            },
            'default': {
                'icon': 'http://www.fabulatech.com/printer-for-remote-desktop-server-help/img/icons/warning-small.gif'
            }
        },
    });
3
répondu Jason 2014-10-22 14:00:22

essayez ce code:

lst_item = [];
$('#city_tree li').each(function(){ lst_item.push($(this).attr('id')); });
$('#city_tree').jstree(true).set_icon(lst_item, "/static/global/plugins/jstree/province.png");
0
répondu Saeed Gharedaghi 2016-08-09 09:27:26

après avoir essayé tant de configurations sans succès, j'ai trouvé une bonne idée!

en utilisant l'éditeur de photos en ligne https://pixlr.com/editor/ j'ai ouvert le fichier image d'icône sous le chemin:

jstree\themes\defaultpx.png

Et j'ai ouvert l'icône de dossier que je veux remplacer

enter image description here

Remplacer facilement et enregistrer :) Je pense que c'est le meilleur après 2 heures de lutte.

0
répondu efirat 2016-09-09 14:05:29

Le script suivant fonctionne pour moi:

$('div#jstree').on('ready.jstree click', function (e, data) {
        $('i.jstree-icon').removeClass('jstree-themeicon jstree-icon').addClass('fa fa-lg fa-user');
    });
0
répondu user6753106 2017-07-14 18:29:47