Вызов Ajax в плагине JSuree JQuery в MVC - PullRequest
0 голосов
/ 17 августа 2010

Я пытаюсь заставить JsTree работать, чтобы получить представление папки в моем приложении MVC. Все работает нормально, если я использую существующий статический HTML-список ul в представлении страницы. Но мне нужно получить список ul динамически, поэтому я пытаюсь вызвать ajax для JsTree, описанного в документации:

<script type="text/javascript">
        var url;
        $(document).ready(function () {
            $("a").click(function () {
                url = "?url=" + $(this).attr("rel");
                alert(encodeURI(url));
            });
        });

        $(function () {

            $("#demo2").jstree({
                "html_data": {
                    "ajax": {
                        "url": "/Home/Directories/"
                    }
                },
                "ui": {
                    "select_limit": 2,
                    "select_multiple_modifier": "alt",
                    "selected_parent_close": "select_parent",
                    "initially_select": ["phtml_2"]
                },
                "themes": {
                    "theme": "classic",
                    "dots": true,
                    "icons": true
                },
                "plugins": ["themes", "html_data", "ui"]
            });
        });

    </script>

Как видите, я пытаюсь установить событие click для всех элементов "a" этого списка. Опять же, это работает нормально, если список ul написан непосредственно в div id = "demo2". Но когда я пытаюсь получить список динамически, событие click для этих динамически созданных элементов не работает. Ничего не произошло. Я проверил результат HTML, и все хорошо, насколько я вижу. Как будто событие click не установлено, потому что динамические элементы a не существуют, когда установлено событие click, может ли это быть? Если так, что я могу сделать с этим? Мне нужно иметь возможность инициировать события на динамически создаваемых элементах ... Я посмотрел в документации JsTree, но он довольно тонкий, в основном просто перечисляет события и так далее, не показывая, как их использовать. Я думаю, если бы я мог иметь обратный вызов, чтобы событие click было установлено только после того, как дерево было создано, что бы оно заработало, но я не могу понять, как написать обратный вызов для этого. (Я очень новичок в jquery и разбираюсь с этим сценарием, но мне он нужен, поэтому я стараюсь учиться по ходу дела).

1 Ответ

4 голосов
/ 17 августа 2010

На самом деле, я нашел ответ сам, немного больше борясь с документацией!Я подозреваю, что документы будет легче понять, когда я узнаю немного больше о jQuery в целом ... В любом случае, если кому-то еще интересно, это то, что мне нужно было сделать, чтобы связать событие так, чтобы оно срабатывало, когда деревосоздано:

    $("#demo2")
        .bind("loaded.jstree", function () {
            $("a").click(function () {
                url = "?url=" + $(this).attr("rel");                    
                alert(encodeURI(url));
            });
        }).jstree(//...[the rest of the function the same as before]...
...