Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jsTree + checkbox (https://javascript.ru/forum/jquery/17912-jstree-checkbox.html)

flatliner 08.06.2011 16:34

jsTree + checkbox
 
Добрый день. Кто-нибудь использует jsTree с плагином checkbox, там опция real_checkboxes вообще работает или нет?

Я вот так задал конфигурацию:
function init() {
  $("#categories_tree").jstree({
    "core": {"initially_open": [1]},
    "plugins": ["themes", "json_data", "checkbox"],
    "json_data": {
      "data": [{
         "data": "Categories",
         "attr": {"id": 1},
         "state": "closed"
      }],
      "ajax": {
        "url": "ajax_categories",
        "data": function (n) {
          return {"id": n.attr ? n.attr("id") : -1}
        }
      }
    },
    "themes": {
      "theme": "classic"
    },
    "checkbox": {
        "real_checkboxes": true
    }
  });
}


Дерево рисуется, но в $_POST ничего не приходит, да и через firebug видно, что для чекбоксов используются тэги <ins>
Я что-то не так делаю или эта фича еще не реализована в плагине?
Спасибо.

flatliner 17.06.2011 15:47

С этой проблемой разобрался. Помог следующий код:
$("#form").submit(function () {   
    $("#categories_tree").jstree("get_checked").each(function() {
      var checkedId = this.id;
      $("#form").append('<input name="categories[]" value="'+checkedId+'" type="hidden">');
    });
  });

Но выползла другая проблема. Надо, чтобы, по мере выбора пунктов в категориях менялась аяксом отображаемая информация на сайте (список сущностей). Я это решил с помощью такого:
function init() {
  $("#categories_tree").bind("change_state.jstree", function (event, data) {
    getData();
  }).jstree({
    "core": {"initially_open": [1]},
    "plugins": ["themes", "json_data", "checkbox"],
    "json_data": {
      "data": [{
         "data": "Categories",
         "attr": {"id": 1},
         "state": "closed"
      }],
      "ajax": {
        "url": "main/ajax_categories",
        "data": function (n) {
          return {"id": n.attr ? n.attr("id") : -1}
        }
      }
    },
    "themes": {
      "theme": "classic"
    }
  });
}

function getData(page) {
    var catIds = '';
    $("#categories_tree").jstree("get_checked").each(function() {
      catIds += this.id+',';
    });
    $.get(
        'main/ajax',
        {
            page: page,
            catids: catIds
        },
        showData
    );
}

Все хорошо, однако, возникает один ньюанс. В дереве категорий могут быть заведомо чекнутые пункты, при первой загрузке страницы они игнорируются (вероятно, дерево jstree еще не успевает полностью загрузиться). Как повесить колбэк на событие полной загрузки дерева?
Пробовал на loaded.jstree вешать - оно срабатывает при каждом раскрытии ветки (когда идет ajax-подгрузка данных), но, вероятно, до того, как данные будут загружены, потому что опять же чекнутые пункты не отлавливаются :(
Помогите пожалуйста разобраться с проблемой.

flatliner 20.06.2011 11:42

Неужели ж никто не решал подобных задач тут?

flatliner 20.06.2011 12:02

Решил пока проблему с помощью setTimeout выставив 5 секунд на раздупление дерева... но понимаю, что такое решение некузявое

DareDevil 31.07.2011 15:54

Jstree + real_checkboxes_names + Opera ?
 
Доброго времени суток!
Недавно стал работать с с jstree, хорошая штука. После написания проекта и тестирования пришел к такому неочень приятному моменту:

"real_checkboxes_names" :function (n) { return (["id[]", n[0].id]) }




Не работает в Opera, всегда значение n[0].id возвращает undefinded, тогда как в IE 6 и выше - работает без нареканий.


Собственно встал вопрос: как лечить и кто-то сталкивался с такой болезнью?


Заранее спасибо.


Часовой пояс GMT +3, время: 15:38.