2014-06-28 13 views
6

Sto usando il plugin jsTree per elencare le cartelle nel file system. Devo impedire a un utente di passare a un altro nodo prima che venga soddisfatta una determinata condizione.
Il seguente codice non interrompe la propagazione ... ho visto alcune soluzioni con altri plugin ma questo è un compito semplice che deve essere possibile senza altri plugin.impedisce jsTree node select

$('#jstree').on('select_node.jstree', function (e) 
{ 
    if (!changeAllowed() 
    { 
     e.preventDefault(); 
     e.stopImmediatePropagation(); 
    } 
}); 

risposta

12

Documentare per me e per i posteri: è necessario includere la seguente funzione Dopo aver caricato il jstree JS (da: https://github.com/vakata/jstree/blob/master/src/misc.js):

// jstree conditional select node 
(function ($, undefined) { 
    "use strict"; 
    $.jstree.defaults.conditionalselect = function() { return true; }; 

    $.jstree.plugins.conditionalselect = function (options, parent) { 
    // own function 
    this.select_node = function (obj, supress_event, prevent_open) { 
     if(this.settings.conditionalselect.call(this, this.get_node(obj))) { 
     parent.select_node.call(this, obj, supress_event, prevent_open); 
     } 
    }; 
    }; 
})(jQuery); 

Poi, quando l'inizializzazione di un'istanza di jstree fare qualcosa del genere:

$('#jstree').jstree({ 
    'conditionalselect' : function (node) { 
    return <something that determines condition> ? true : false; 
    }, 
    'plugins' : ['conditionalselect'], 
    'core' : { 
    <core options> 
    } 
}); 
+2

Questo ha un bug. Supponiamo che l'albero permetta solo 1 selezione, e selezioni A, e quindi selezioni B, e il 'condizionale' rifiuta B. Ti aspetteresti che A sia ancora selezionato, ma non lo è. –