Как мне получить jstree для автоматического открытия пути к первому узлу дерева (и функции триггера) - PullRequest
0 голосов
/ 25 марта 2019

Я использую jstree

Я строю дерево, листовые узлы содержат href, который затем открывается в iFrame на той же странице. Это делается с помощью функции, с которой связан каждый раз, когда в jstree выбирается узел, который проверяет, имеет ли узел реальный href, а затем соответствующим образом вносит изменения в iFrame, в противном случае он открывает узел.

<div class="container-fluid">
    <div class="row">
        <div class="col">
            <div id='songchanges'>
               <ul>
                   <li id='phtml_1'>
                       <a href='#'>E:\Melco\TestMusic\TestMusic\TestMusic\WAV\Music\Dead Inside\No.4\</a>
                       <ul>
                           <li id="phtml_2">
                                <a href="FixSongsReport00440_body_aBE9p7eQo0baClCFB6BhPQ==.html" 
                                   target="_blank">
        Flower
                                </a>
                           </li>
                       </ul>
                   </li>
               </ul>
            </div>
        </div>
        <div class="col-8">
           <iframe id="processingResults" name="processingResults" 
                 style="border:none; width:100%;height:500px">
            </iframe>
        </div>
    </div>
</div>




<script>
      $(function ()
        {
            $('#songchanges')
                .jstree
                (
                    {
                    'plugins' : ['themes','html_data','ui','cookie'],
                    'core' : { 'initially_open' : [ 'phtml_1' ] }
                    }
                )
                .bind('select_node.jstree',
                    function (e, data)
                    {
                        var href    = data.node.a_attr.href;
                        var iframe  = document.getElementById("processingResults");
                        if(href!='#')
                        {
                            iframe.src = href;
                        }
                        else
                        {
                            $(this).jstree('toggle_node', data.node);
                        }
                    }
                );
            }
        );
</script>

Это хорошо работает, но когда страница отображается в первый раз, я не хочу, чтобы iframe был пустым, поэтому я хотел бы, чтобы jstree автоматически открыл первый листовой узел и вызвал функцию для загрузки iFrame.

Как мне это сделать?

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете использовать обработчик событий ready.jstree , чтобы выбрать узел после того, как дерево будет готово.Функция select_node в экземпляре дерева вызовет событие select_node.

$('#songchanges').jstree(
    {
        'plugins': ['themes', 'html_data', 'ui', 'cookie'],
        'core': { 'initially_open': ['phtml_1'] }
    }
).on('select_node.jstree',
    function (e, data) {
        var href = data.node.a_attr.href;
        var iframe = document.getElementById("processingResults");
        if (href != '#') {iframe.src = href; }
        else { $(this).jstree('toggle_node', data.node); }
    }
).on('ready.jstree', function (e, data) {
    var leaf = null;
    var getFirstLeaf = function (id) {
        var node = data.instance.get_node(id); 
        if(node.children.length > 0){
            return getFirstLeaf(node.children[0]);
        }
        return data.instance.select_node(id); //Triggers select_node event
    };
    getFirstLeaf('phtml_1'); // Start from the root node id
});
...