LINUX.ORG.RU

Сообщения hunt

 

[javascript][Alloy UI] Расширить TreeView и TreeNode

Доброе время суток.

Требуется изменить поведение стандартных компонентов TreeView и TreeNode из библиотеки Alloy UI (надстройка над Yahoo UI). А конкретно, требуется изменить рендер нод дерева. Для этого я заместил функцию _renderBoundingBox объекта TreeNode в своём объекте TreeNodeCustom:

_renderBoundingBox: function() {
    var instance = this;
    var boundingBox = instance.get('boundingBox');
    var contentBox = instance.get('contentBox');

    var nodeContainer = null;

    if (!instance.isLeaf()) {
        contentBox.append(instance.get('hitAreaEl'));
        nodeContainer = instance._createNodeContainer();
    }

    var element = A.Node.create(ELEMENT_TPL);
   
    // here I need the owner tree
    var builderObject = instance.get('builderObject');
    var nodeBuilder = instance.get('ownerTree').get('nodeBuilder');
    if (!nodeBuilder) {
        var err = 'Couldn\'t get builder function. Owner-tree of the TreeNodeCustom must be the TreeViewCustom.';
        A.error(err, new TypeError(err));
    }
    var node = nodeBuilder(builderObject);
    if (!(node instanceof A.Node)) {
        var err = 'Wrong type of built node.';
        A.error(err, new TypeError(err));
    }
   
    element.append(node);
   
    contentBox.append(element);
    boundingBox.append(contentBox);
   
    if (nodeContainer) {
        if (!instance.get('expanded')) {
            nodeContainer.addClass(CSS_TREE_HIDDEN);
        }
        boundingBox.append(nodeContainer);
    }

    return boundingBox;
},

Для рендера мне нужна функция nodeBuilder, которая хранится атрибутом в объекте TreeViewCustom (корневой объект дерева). Но атрибут ownerTree устанавливается только в нодах первого уровня (хранящихся непосредственно в объекте дерева):

aui-tree-data.js

_setChildren: function(v) {
    var instance = this;
    var childNodes = [];

    A.Array.each(v, function(node) {
        if (node) {
            if (!isTreeNode(node) && isObject(node)) {
                // creating node from json
                node = instance.createNode(node);
            }

            // before render the node, make sure the PARENT_NODE and OWNER_TREE references are updated
            // this is required on the render phase of the TreeNode (_createNodeContainer)
            // to propagate the events callback (appendChild/expand)
            if (!isTreeNode(instance)) {
                node.set(OWNER_TREE, instance);
            }

            node.render();

            // avoid duplicated children on the childNodes list
            if (A.Array.indexOf(childNodes, node) == -1) {
                childNodes.push(node);
            }
        }
    });

    return childNodes;
}

Пришлось его тоже заместить:

_setChildren: function (v) {
    var instance = this;
    var childNodes = [];

    A.Array.each(v, function(node) {
        if (node) {
            if (!isTreeNode(node) && A.Lang.isObject(node)) {
                // creating node from json
                node = instance.createNode(node);
            }

            // before render the node, make sure the PARENT_NODE and OWNER_TREE references are updated
            // this is required on the render phase of the TreeNode (_createNodeContainer)
            // to propagate the events callback (appendChild/expand)
            node.set('ownerTree', isTreeNode(instance) ? instance.get('ownerTree') : instance);
            node.set('parentNode', instance);

            node.render();

            // avoid duplicated children on the childNodes list
            if (A.Array.indexOf(childNodes, node) == -1) {
                childNodes.push(node);
            }
        }
    });

    return childNodes;
}

Это даёт желаемый результат, но замещение внутренних функций базовых объектов - не очень-то хороший подход. В то же время реализовывать полностью дерево не хотелось бы.

Фреймворк я недавно начал изучать, поэтому, возможно, просто не вижу правильного пути. Может быть кто-нить подскажет другой способ?

 

hunt
()

[SIS] Student Information system

Ищу системы для управления образовательным процессом (т.н. Student Information System). Студентов/учеников учитывать, их успеваемость итп.

Я только начал разбираться, поэтому конкретных требований нет. Хотелось бы опенсорс и русскую локализацию.

Пока решил посмотреть OpenSIS и Focus/SIS.

Поделитесь, пожалуйста, опытом и ссылками, кто изучал вопрос.

hunt
()

[Apache] изменения в per-server config не сохраняются

Пишу модуль для Apache. Нерабочий код.

Код синтетический - содержит лишь ключевые моменты без лишней шелухи. Поэтому обсуждать подход к реализации не имеет смысла.

От модуля требуется дописать строки к возвращаемым данным. Строки эти задаются специальной командой:

hunt@zeus:~/temp/apache/asdf$ nc 127.0.0.1 80
GET asdf
str1
str2
str3

но он это делать отказывается.

Добавление строк к данным происходит в строках 62 - 65:

  for (i = 0; i < cfg->commands->nelts; i++) {
    ap_fputs(f->next, bb,
             APR_ARRAY_IDX(cfg->commands, i, asdf_command_t).name);
  }

а сохранение в конфигурации в строках 116 - 121:

  while (s) {
    if (*s != '\n' && strlen(s) > 0 && strlen(s) < CMD_BUFF) {
      strcpy(APR_ARRAY_PUSH(commands, asdf_command_t).name, s);
    }
    s = apr_strtok(NULL, CMD_DELIMITERS, &last);
  }

Если раскомментировать строку 35:

//  strcpy(APR_ARRAY_PUSH(srv_conf->commands, asdf_command_t).name, "qwerq");

то модуль будет исправно добавлять этот «qwerq».

Чтение данных из сокета и заполнение массива asdf_srv_conf->commands проверял, вроде как не должно быть ошибок. В логах ничего нет, что логично, ибо опыта разработки модулей apache у меня немного, и туплю скорее всего я, а не сервер.

Почему могут не сохраняться данные в per-server config?

 

hunt
()

RSS подписка на новые темы