Открыть ветку при нажатии на node?
Я застрял в jsTree здесь. Пока это работает, и я могу просматривать и расширять узлы с помощью значка [+] и открывать страницы при нажатии node, НО я все же хочу, чтобы он расширил все непосредственные узлы всякий раз, когда кто-то нажимает на node.
Я смотрел в течение как минимум 2 часов, но не нашел ничего. официальный сайт не очень полезен, потому что у них недостаточно примеров, и он не очень хорошо документирован. посмотрел на это, но не работал у меня:
http://luban.danse.us/jazzclub/javascripts/jquery/jsTree/reference/_examples/2_operations.html
Я даже не получил сообщение об ошибке в firebug
так вот как выглядит мой код прямо сейчас,
tree init:
$(function () {
$("#jstree").jstree({
....
вызванная нажатием на node
.delegate("a","click", function (e) {
//click on node
var page_id = $(this).parent().attr("page_id");
var idn = $(this).parent().attr("id").split("_")[1];
/*
dosnt seem to work either...
$(this).jstree("openNode", $("#node_"+idn));
$(this).jstree("openNode", "#node_"+idn);
*/
page = "index.php?page_id="+page_id;
//location.href = page;
})
.bind тоже не работал:
$(this).bind("open_node.jstree", function (event, data) {
if((data.inst._get_parent(data.rslt.obj)).length) {
data.inst._get_parent(data.rslt.obj).open_node(this, false);
}
})
Кто-нибудь видит, что я здесь отсутствует?
Ответы
Ответ 1
Вам нужно привязать select_node.jstree и вызвать toggle_node в экземпляре дерева при его срабатывании:
Для версий jsTree < 3.0:
$("#your_tree").bind("select_node.jstree", function(event, data) {
// data.inst is the tree object, and data.rslt.obj is the node
return data.inst.toggle_node(data.rslt.obj);
});
Для версий jsTree >= 3.0
$("#your_tree").bind("select_node.jstree", function (e, data) {
return data.instance.toggle_node(data.node);
});
Ответ 2
С более новой версией jsTree (3.0.0 в соответствии с jsTree.js) мне пришлось изменить код, предоставленный @justind bit to work:
$("#jstree").bind("select_node.jstree", function (e, data) {
return data.instance.toggle_node(data.node);
});
Ответ 3
Я использую это (casoUso - это ссылка на страницу, fInvocaCasoUso - это функция для вызова).
$("#demo1").bind("select_node.jstree", function (e, data)
{
if (data.rslt.obj.attr("casoUso")!=undefined)
{
fInvocaCasoUso(data.rslt.obj.attr("casoUso"));
}
else
{
$("#demo1").jstree("toggle_node",data.rslt.obj);
}
});
Если у node есть ссылка, открывается, если нет, открытое поддерево. В любом случае, вы должны иметь возможность объединить обе стороны "if", чтобы открыть ветвь и выполнить вашу ссылку.
Возможно выполнение:
$("#demo1").jstree("toggle_node",data.rslt.obj);
fInvocaCasoUso(data.rslt.obj.attr("casoUso"));
Сделал бы это...