/** * ### Глобальная нода * Предоставляет интерфейс доступа к содержимому глобальной ноды * * Здесь создаются менеджер по работе с вложенными нодами и менеджер типов ноды * *
* Связанные объекты: * * - {@link Trees.GlobalTree} - Здесь можно найти примеры, как работать с глобальным деревом * - {@link Trees.GlobalTree.Node.Children} - Здесь можно найти примеры, как работать с вложенными нодами * - {@link Trees.GlobalTree.Node.NodeTypes} - Здесь можно найти примеры, как работать с типами ноды * - {@link Trees.GlobalAttributeTree.Node} - Нода у которой присутствуют базовые и динамические атрибуты * * * @example * // Пример: Как получить ноду дерева? * * // Пример взят для дерева тополгии * var tree = null; * var node = null; * * // Осуществляем запрос к менеджеру деревьев, на получение провайдера дерева * ps.pl.tm.get(new v2.string("st")).then(function(ref){ * // ref - это ссылка на объект * // метод value возвращает целевой объект. В данном случае дерево Trees.SchemeTree * tree = ref.value(); * * // Доступ к ноде осуществляется похожим образом, но теперь вместо строки нужно указать v2.integer * // Так как возвратится нативный проимс, мы можем вернуть его и обработать в следующем then * return tree.get(v2.integer.from_number(0)) * }, function(err){ * // в случае неудачи придет ошибка. * // обычно в ошибке содержится три переменные err - код ошибки, message - краткое описание, sub - если к этому * // привела другая ошибка внутри системы. * }).then(function(ref){ * // Вот мы и получили ноду. * node = ref.value(); * }, function(err){ * // Отобразим ошибку * console.warn(err); * }) * * * @class Node * @memberof Trees.GlobalTree */ function Node() { /** * ### Менеджер вложенных нод * * Внимание! На момент создания ноды, он не существует (что бы не съедать ресурсы системы). * * Поэтому вначале нужно запросить список чилдов, или загрузить его через this.children_manager * * @public * @name cm * @memberof Trees.GlobalTree.Node * @type {Trees.GlobalTree.Node.Children} */ this.cm = new Trees.GlobalTree.Node.Children(); /** * ### Добавление новой ноды * * Добавляет новую ноду используя текущую как парента. * * После добавления, менеджера вложенных нод, пошлет сигнал s_node_add * * * @example * // Пример: * * // При добавлении ноды, так же можно добавить произвольное количество атрибутов * // каждый атрибут имеет метаданные * // - removable : v2.boolean, * // - editable : v2.boolean, * // - visible : v2.boolean, * // - type : v2.type * // - value : v2.base * * // Создадим мапу для аттрибутов * var my_attributes = new v2.map(v2.string.type, v2.vc.type); * * // Добавим в нее один атрибут * my_attributes.put(new v2.string("my_attribute"), v2.vc.from_object({ * removable: new v2.boolean(true), * editable: new v2.boolean(true), * visible: new v2.boolean(true), * type: new v2.type(v2.string.type), * value: new v2.string("Hello World!") * })); * * // В данном примере, я не буду полностью доступаться до ноды по всей цепочке, (т.к. она описана выше) * // Допустим что сейчас она есть на руках. * * // Необходимо указать какой тип будет у создаваемой ноды. Это можно узнать из ядра. Или при у модели дерева * // там есть, список типов нод. * // В примере используется дефолтный тип для дерева топологии(схемы): @schemeNode * var node_type = new v2.model_type("schemeNode"); * * // Добавим ноду * node.add_node(node_type, my_attributes); * * // Все. Нода добавилась, теперь в чилды придет оповещение. * * @public * @function add_node * @memberof Trees.GlobalTree.Node * @param {v2.model_type} _type * @param {v2.map(v2.string, v2.vc)} _attrs */ this.add_node = function(_type, _attrs) { }; /** * Возвращает уникальный идентификатор ноды. * * @exapmle * // Пример: * var nodeId = node.id(); * * @public * @function id * @memberof Trees.GlobalTree.Node * @returns {v2.integer} */ this.id = function() { }; /** * ### Возвращает список вложенных нод (Идентификаторы). * * А так же загрузит менеджер вложенных нод. После этого можно будет пользоваться this.cm * *
* Получив идентификаторы, можно сделать запрос на загрузку ноды у дерева. * *
* Результат: * - в случае успеха возвращает {@link v2.list(v2.integer)} * - в случае отмены возвращает {@link Errors.PromiseReject} * * @example * // Пример: * * // Получаем промис на загрузку списка * var promise = node.children(); * * // Навешиваем обработчики на промис * promise.then(function(children){ * // распечаетаем список идентификаторов: * v2.tools.print(children); * * // Пример вывода: * // * // List(Integer) [ * // 1, * // 2, * // 3, * // 4, * // 5 * // ] * }, function(err){ * // выведем отмену * console.warn(err); * }) * * @public * @function children * @memberof Trees.GlobalTree.Node * @returns {tools.promise(v2.list(v2.integer))} */ this.children = function() { }; /** * ### Получить менеджер вложенных нод * * В данном случае если МВН не загружен, загрузит его. * * Если уже загружен то вернет. * *
* После вызова этого метода, будет проинициализированна переменная this.cm * *
* Результат: * - в случае успеха вернется {@link Trees.GlobalTree.Node.Children} * - в случае отмены вернется {@link Errors.PromiseReject} * * @example * // Пример: * // В данном примере, я не буду полностью доступаться до ноды по всей цепочке, (т.к. она описана выше) * // Допустим что сейчас нода есть на руках. * * // Получаем промис на загрузку МВН * var promise = node.children_manager(); * * // Обрабатываем результат * promise.then(function(cm){ * // Итак в переменной cm находится МВН * * // Пример использования такого подхода * var children = cm.children(); * }, function(err){ * console.warn(err); * }) * * @public * @function children_manager * @memberof Trees.GlobalTree.Node * @returns {tools.promise(NodeChildren)} */ this.children_manager = function() { }; /** * Осуществляет проверку на существование менеджера нод. * * @public * @function children_manager_exist * @memberof Trees.GlobalTree.Node * @returns {boolean} */ this.children_manager_exist = function() { }; }