powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Динамическое дерево в ExtJS 4.2
20 сообщений из 20, страница 1 из 1
Динамическое дерево в ExtJS 4.2
    #38275583
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нибудь вообще с ним нормально работал? Перерыл весь сенчевский форум, там только смешные маленькие деревья одним файлом.

По сути вопроса
Пытаюсь сделать дерево с динамической подгрузкой при раскрытии. Свел уже к простейшему примеру

JS
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
* Model */
 Ext.define('KB_TOPICSREC',
 {
  extend: 'Ext.data.TreeModel',
  fields: [
   {name: 'NAME'},
   {name: 'KEYWORDS'},
   {name: 'DESCRIPTION'},
   {name: 'ISACTIVE'}
  ]
 }
 );

window.KB_TOPICSstore = Ext.create('Ext.data.TreeStore',
 {
  model: 'KB_TOPICSREC',
  proxy: {
   type: 'ajax',
   url: 'treedata.txt',
   reader: {type: 'json'}
  }
 }
);


/* MAIN WINDOW */
window.viewport = Ext.create('Ext.Viewport',
 {
  layout: {type: 'fit', padding: 5},
  defaults: {split: true},
  items: [{

  region: 'center',
  xtype: 'treepanel',
  useArrows: false,
  singleExpand: false,
  rootVisible: false,
  collapsible: true,
  layout: 'fit',
  store: window.KB_TOPICSstore,
  selType: 'cellmodel',
  columns: [
   {text: "Name", dataIndex: 'NAME', sortable: true, width: 188, align: 'left',xtype: 'treecolumn'},
   {text: "Keywords", dataIndex: 'KEYWORDS', sortable: true, width: 94, align: 'left'},
   {text: "Description", dataIndex: 'DESCRIPTION', sortable: true, width: 549, align: 'left'}
  ]
 }
]


});



JSON

Код: html
1.
2.
3.
4.
5.
[
 {  NAME: '1', DESCRIPTION: '1', KEYWORDS: '1',  id:'1'},
 {  NAME: '2', DESCRIPTION: '2', KEYWORDS: '2',  id:'2'},
 {  NAME: '3', DESCRIPTION: '3', KEYWORDS: '3',  id:'3'},
]



При загрузке дерево выглядит ожидаемо



Но вот стоит раскрыть скажем второй узел как
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38276098
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovJSON

А Вас не смущает, что Ваш JSON ни грамма не похож на ?
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38277175
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftasviridenkovJSON

А Вас не смущает, что Ваш JSON ни грамма не похож на ?

Совершенно не смущает. Дело оказалось в том что treestore не переваривает одинаковых id даже в разных ветках
А JSON нормальный
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38278067
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovtreestore не переваривает одинаковых id
/me думает: внезапно ...
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38280581
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft,

Ну реально то это косяк и засада
Потому что в жизни ситуация вполне обычная
Например, в моем случае - есть некое большой дерево и поиск по нему
Поиск должен выводить все найденные узлы с возможнотью их раскрытия
То есть если под условия попадает и узел и родитель, он может оказаться в дереве дважды
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281184
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov,

переименуйте ИД в что-то другое и ищете по этому параметру
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281289
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artas,

Не понял, при чем тут id и поиск
Я говорю о том, что extjs-овскому дереву нужно чтобы у каждой записи в дереве был _уникальный_ id

И само оно его формировать не хочет
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281400
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovЯ говорю о том, что extjs-овскому дереву нужно чтобы у каждой записи в дереве был _уникальный_ idНу так добавьте.

asviridenkovИ само оно его формировать не хочетС какой стати оно должно это делать?
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281411
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Я то добавлю
Речь о том что это дополнительное неудобство, которого разработчики могли избежать

С какой стати должно делать? С такой, чтобы не заставлять это делать пользователей. Удобство использования снижается.
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281422
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov,

id - идентификатор( в случае ExtJS должен быть уникальным). А у вас он выходит НЕуникальный - значит это не ИД, а просто какой-то код
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281449
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovAntonariy,

Я то добавлю
Речь о том что это дополнительное неудобство, которого разработчики могли избежать

С какой стати должно делать? С такой, чтобы не заставлять это делать пользователей. Удобство использования снижается.Нда.

В 99 случаях из 100 дерево берется из базы, в которой таки есть id. Если вы набиваете данные руками, проблема с постановкой или путем реализации задачи, а не библиотекой.
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281475
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyasviridenkovAntonariy,

Я то добавлю
Речь о том что это дополнительное неудобство, которого разработчики могли избежать

С какой стати должно делать? С такой, чтобы не заставлять это делать пользователей. Удобство использования снижается.Нда.

В 99 случаях из 100 дерево берется из базы, в которой таки есть id. Если вы набиваете данные руками, проблема с постановкой или путем реализации задачи, а не библиотекой.

Вы вообще читаете что я пишу?
Id берется из базы, но если выводится результат поиска, то один узел может появиться в дереве несколько раз, в разных ветках.
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281503
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovВы вообще читаете что я пишу?
Id берется из базы, но если выводится результат поиска, то один узел может появиться в дереве несколько раз, в разных ветках.
А ты читаешь, что тебе пишут?

artasпереименуйте ИД в что-то другое и ищете по этому параметру
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281506
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

При чем тут переименование id?
Поиск не по id, поиск по другим полям
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281539
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov , главное чтобы ты уяснил для себя, что ИД должен быть уникальным на странице?
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281645
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovВы вообще читаете что я пишу?по диагонали, каюсь

asviridenkovесли выводится результат поиска, то один узел может появиться в дереве несколько раз, в разных ветках.Я много работаю с деревьями, умею их фильтровать и делать выборки любой сложности, и у меня в голове не укладывается, как можно добиться такого странного результата.
Каким образом один и тот же узел может быть в разных ветках???
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281719
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyКаким образом один и тот же узел может быть в разных ветках???
Коллега как-то писал программу для наших ЖЭУ (или как там они сейчас)... Так вот. У них "элемент" "Замена труб" мог встречаться в узле "Работы на крыше" и "Работы в подвале"...
Там тарифная сетка ведется ввиде дерева и собирается то дерево из виксированных наборов, которые сами состоят из фиксированого перечня.
Т.о. всегда можно посмотреть где велась "Замена труб" но стоимость при этом в "подвале" (например) дешевле чем "на крыше"...
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281792
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa Там тарифная сетка ведется ввиде дерева и собирается то дерево из виксированных наборов, которые сами состоят из фиксированого перечня.
Т.о. всегда можно посмотреть где велась "Замена труб" но стоимость при этом в "подвале" (например) дешевле чем "на крыше"...Дык в этом случае в записи узла имеется и ее id и id элемента, прицепленного к этому узлу.
Id замены труб может повторяться в разных узлах, без вопросов, но это же не id узла.
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281829
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Пусть есть дерево в базе
А-|
B
Делаем по нему поиск. Поиск выводит все найденные узлы
Независимо от уровня. Причем их можно раскрывать
Если под условия попадут и А и В то результат выглядит так

В

Теперь если раскрыть А то В оказывается в дереве дважды
...
Рейтинг: 0 / 0
Динамическое дерево в ExtJS 4.2
    #38281928
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovAntonariy,

Пусть есть дерево в базе
А-|
B
Делаем по нему поиск. Поиск выводит все найденные узлы
Независимо от уровня. Причем их можно раскрывать
Если под условия попадут и А и В то результат выглядит так

В

Теперь если раскрыть А то В оказывается в дереве дваждыЭто настолько криво, что я почти ничего не понял.
Зачем В вставлять в дерево второй раз? Поиск где происходит, на клиенте? Подгрузка вот динамическая, а что если искомые ветки еще не подгрузились?
Если на сервере, почему нельзя просто исключить фильтром те ветки, которые не являются ни родителями ни потомками найденных, и вывести нормальное дерево, подрезанное под условия поиска?

Это дерево вообще знает о принципе nested sets ? Если нет, то срочно должно узнать.
Вот процедура, которая из обычного дерева типа parent-child делает nested sets, остальные манипуляции таким деревом (кроме фильтрации) доступны по ссылке.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
TreeRecalc cn, 0, 0, 0, 0

Sub TreeRecalc(ByVal cn As ADODB.Connection, ByVal RefID As Long, ByVal Level As Integer, LeftKey As Long, RightKey As Long)
Dim rs As New ADODB.Recordset
Dim rk As Long, lk As Long
Dim rc As Long
    Level = Level + 1
    Set rs = cn.Execute("select CatalogueID from tblCatalogue where RefID = " & RefID & " Order by Code")
    While Not rs.EOF
        rc = rc + 1
        LeftKey = RightKey + 1
        RightKey = LeftKey + 1
        rk = RightKey - 1
        lk = LeftKey
        TreeRecalc cn, rs!CatalogueID, Level, LeftKey, rk
        If rk = RightKey - 1 Then
            RightKey = rk + 1
        Else
            RightKey = rk
        End If
        cn.Execute "update tblCatalogue set Level = " & Level & _
            ", LeftKey = " & lk & ", RightKey = " & RightKey & " where CatalogueID = " & rs!CatalogueID
        rs.MoveNext
    Wend
    If rc > 0 Then
        Set rs = cn.Execute("SELECT MAX(LeftKey) + 1 LeftKey, MAX(RightKey) + 1 RightKey from tblCatalogue WHERE RefID = " & RefID)
        LeftKey = rs!LeftKey
        RightKey = rs!RightKey
    End If
End Sub

Важный момент: у этого дерева должен быть единственный корень.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Динамическое дерево в ExtJS 4.2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]