Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Как правильно отыскать узел в модели дерева? (https://javascript.ru/forum/angular/46750-kak-pravilno-otyskat-uzel-v-modeli-dereva.html)

hopest 22.04.2014 13:24

Как правильно отыскать узел в модели дерева?
 
Есть дерево:

$scope.roleList1 = [
        { "roleName" : "User", "roleId" : "role1", "children" : [
          { "roleName" : "subUser1", "roleId" : "role11", "children" : [] },
          { "roleName" : "subUser2", "roleId" : "role12", "children" : [
            { "roleName" : "subUser2-1", "roleId" : "role121", "children" : [
              { "roleName" : "subUser2-1-1", "roleId" : "role1211", "children" : [] },
              { "roleName" : "subUser2-1-2", "roleId" : "role1212", "children" : [] }
            ]}
          ]}
        ]},

        { "roleName" : "Admin", "roleId" : "role2", "children" : [] },

        { "roleName" : "Guest", "roleId" : "role3", "children" : [] }
      ];


Мне надо отыскать узел
{ "roleName" : "subUser2-1-2", "roleId" : "role1212", "children" : [] }

и сделать например его активным

FireVolkhov 22.04.2014 13:50

1. Как найти? По рекурсии проверяешь каждый элемент Рекурсия, стек
2. Как выделить? Найдешь ответ в исходниках на 85 строке гит angular.treeview

nerv_ 22.04.2014 14:03

Цитата:

Сообщение от FireVolkhov
Найдешь ответ в исходниках на 85 строке

можно ссылку давать на строку https://github.com/eu81273/angular.t...reeview.js#L85

Tek 22.04.2014 14:28

Цитата:

Сообщение от FireVolkhov
1. Как найти? По рекурсии проверяешь каждый элемент Рекурсия, стек

Зачем рекурсия? есть же underscore.js и метод find

hopest 22.04.2014 16:56

С кода всем сразу стало понятно что это angular.treeview.js :)

По самому выделению, мне известен узел, и я его выделяю
angular.forEach($scope.roleList, function(data, index){
                if(data.roleId == 'role2'){
                    $scope.mytree.selectNodeLabel(data);
                }
            });


А можно ли прямо так (не работает)
$scope.mytree.selectNodeLabel('{"roleName":"Guest","roleId":"role3","children":[{"roleName":"subGuest1","roleId":"role11","children":[]},{"roleName":"subGuest2","roleId":"role12","collapsed":true,"children":[{"roleName":"subGuest2-1","roleId":"role121","children":[{"roleName":"subGuest2-1-1","roleId":"role1211","children":[]},{"roleName":"subGuest2-1-2","roleId":"role1212","children":[]}]}]}],"selected":"selected"}');

FireVolkhov 23.04.2014 07:51

Цитата:

Сообщение от nerv_ (Сообщение 308772)
можно ссылку давать на строку https://github.com/eu81273/angular.t...reeview.js#L85

Удобно, запомню, спасибо.
Цитата:

Сообщение от Tek (Сообщение 308775)
Зачем рекурсия? есть же underscore.js и метод find

Можешь привести пример поиска объекта с roleId == "role1211" используя underscore.js
Цитата:

Сообщение от hopest (Сообщение 308820)
...
А можно ли прямо так (не работает)
$scope.mytree.selectNodeLabel('{"roleName": "Guest","roleId": "role3","children": [....],"selected": "selected"}');

В функции не предусмотрено такое использование, если тебе нужна именно такая логика, переопредели функцию $scope.mytree.selectNodeLabel на свою


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