2013-08-13 2 views
2

Мой php-код создает иерархический набор данных json для иерархического источника данных, используемого treeview.Kendo TreeView по умолчанию выбранный узел не запускается onSelect

В этой функции генерации php я устанавливаю самый первый лист как selected = true ... поэтому, когда появляется дерево, первый лист автоматически выбирается.

Проблема заключается в том, что когда пользователь нажимает на любой лист, запускается событие (onSelect), но оно не запускается для этого автоматического выбора самого первого узла, который возникает, когда дерево отображается во время создания пользовательского интерфейса.

Как я могу это исправить?

UPDATE: Made a Demo: http://jsbin.com/abapid/2/edit

+0

Не могли бы вы сделать код, показывающий его? Он использует, чтобы облегчить устранение других проблем, чем писать и, возможно, не воспроизводить проблему. – OnaBai

+0

http://jsbin.com/abapid/2/edit – Tuthmosis

+0

Он работает! Что не работает? Если я нажму «Таблицы и стулья», появится всплывающее окно. – OnaBai

ответ

1

Для преимуществ других .... и благодаря OnaBai!. .. Вот решение!

У Kendo UI не хватает многих базовых функций, которые предоставляет другой UI SDK. Один из них - это «onDisplay», который даже запускается после того, как виджет будет окрашен. Это позволило бы приложению реагировать на конкретный случай, например, в шахте, где dataSource загружал узел, содержащий поле «selected = true».

Kendo TreeView реагирует, показывая узел как выбранный, но в большинстве сценариев реального мира приложение также должно реагировать. Вот почему нужно будет вызвать инициализацию виджета, чтобы проверить, выбран ли узел и соответственно ли он реагирует.

Единственный взломанный нами (OnaBai) найден, чтобы использовать событие «DataBound» как событие события «onDisplay». Приветствие заключается в том, что это событие запускается каждый раз, когда родительский узел является дочерним, который каким-то образом модифицировался. Поэтому он называется несколько раз.

Так вот код, чтобы обойти это ограничение! http://jsbin.com/ejabul/4/edit (Обратите внимание, что вы должны нажать «Запуск с JS» для имитации перезагрузки страницы)

$("#treeview").kendoTreeView({ 
    dataSource:data, 
    dataTextField: "text", 
    select: onSelect, 
    dataBound: function (e) { 
    var uid = undefined; 
    var now = this.select(); 
    if (now) { 
     var data = this.dataItem(now); 
     uid = data.uid; 
     if (uid && uid !== this.old_selected) { 
      alert("Bingo !"); 
     } 
     console.log("data", data.uid); 
    } 
    this.old_selected = uid; 
    } 
}); 

Разъяснение OnaBai

  1. Магазин в UID Уникальный идентификатор выбранного элемента , Этот идентификатор вводится пользовательским интерфейсом Kendo для большинства узлов, элементов, ... которые он создает. Первоначально я устанавливал его неопределенным (на случай, если ничего не выбрано)
  2. «now» содержит текущий выбранный узел (если есть).
  3. Если элемент выбран (теперь! == undefined), я получаю элемент данных для выбранного узла, а затем получаю UID для этого узла.
  4. Если есть UID и отличается от UID предыдущего выбранного узла (который я храню в поле, которое я только что расширил в tree_view, и я вызвал old_selected), тогда я предупреждаю.
  5. Наконец, я сохраняю UID выбранного узла в следующий раз.

В основном я пытаюсь контролировать то, что я не предупреждаю два раза подряд для одного и того же узла и для его управления. Я сохраняю UID выбранного узла с одной итерации на другую.

2

Если вы хотите, чтобы программно вызвать select событие, вы должны сделать:

$("#treeview").data("kendoTreeView").trigger("select"); 
+0

Да, но тогда другая проблема заключается в том, что у меня нет места для размещения этого звонка ... Нет никакого события onShow для TreeView, которое позволит мне реагировать, как только TreeView будет окрашиваться .... – Tuthmosis

+0

Почему не в событии 'dataBound'? – OnaBai

+0

Поскольку разработчик C++, такой как я, который создает приложения UI с Win32, QT, OSF/MOTIF ..., используется для поиска функции API onShow! ... Спасибо человеку! – Tuthmosis

Смежные вопросы