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

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

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
28.05.2013, 11:31
    #38276098
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое дерево в ExtJS 4.2
asviridenkovJSON

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В

Теперь если раскрыть А то В оказывается в дереве дважды
...
Рейтинг: 0 / 0
31.05.2013, 18:15
    #38281928
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое дерево в ExtJS 4.2
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
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Динамическое дерево в ExtJS 4.2 / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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