Программирование - это просто
Advertisement
Главная arrow Web-программирование arrow Уроки Java Script arrow Web-программирование: «Java Script(JS): Библиотека визуальных компонентов. Класс контейнер».
26.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Web-программирование: «Java Script(JS): Библиотека визуальных компонентов. Класс контейнер». Печать E-mail
Автор megabax   
23.08.2011 г.
Урок 13. Управление шрифтами в CSS New Page 1

Web-программирование: «Java Script(JS): Библиотека визуальных компонентов. Класс контейнер».

 

Скачать файлы с описанными классами можно здесь.

Так же для углубленного изучения web-программирования (язык PHP и написание своей собственной CMS) советую подписаться на платный раздел (см. анонсы раздела "Пишем Easy CMS").

 

Изучим следующий класс библиотеки визуальных компонентов: CXBrObjectsContainer. Он может содержать в себе другие классы и передавать между ними сообщения. Механизм передачи сообщений между объектами предполагает, что любой экземпляр любого класса, между которыми может быть передача сообщений, обязательно должен быть включен в контейнер. Сам контейнер может быть включен в другой контейнер. Те классы, которые могут являться контейнерами, обязательно должны объявлять от класса CXBrObjectsContainer или его дочерних классов.

Данный класс являться базовым для создания всех классов контейнеров. Кроме того, сам класс уже является полноценным готовым контейнером. Цель создания дочерних объектов от данного класса обычно является расширения функционала контейнера, в частности, ввод действий, которые нужно сделать со всеми членами контейнера, например, отобразить их на экране. В обязательном порядке переопределяется метод_get_class_name, так как у нового класса должно быть другое имя.

И так, вот как объявлен этот класс:

 

// ********** Объявления класса CXBrObjectsContainer *******************

function CXBrObjectsContainer() {

    CXBrBaseInterfaceClass.call(this);

    this._get_class_name=CXBrObjectsContainer_get_class_name;

    this._hierarchy_classes.push(this._get_class_name());

    this._objects_list=new Array;

    this._add=CXBrObjectsContainer_add;

    this._add_object=CXBrObjectsContainer_add_object;

    this._remove=CXBrObjectsContainer_remove;

    this._send_message=CXBrObjectsContainer_send_message;

    this._remove_all=CXBrObjectsContainer_remove_all;

    this._get_by_id=CXBrObjectsContainer_get_by_id;

    this._get_by_name=CXBrObjectsContainer_get_by_name;

    this._global_get_by_name=CXBrObjectsContainer_global_get_by_name;

}

Он является потомком  CXBrBaseInterfaceClass, поэтому вызывает у последнего конструктор:

CXBrBaseInterfaceClass.call(this);

 

Далее мы переопределяем метод получения имени класса и добавляем имя данного класса в массив иерархии, для того, что бы работали методы _is_child, _is_child_or_self, _is_parent и _is_parent_or_self, принадлежащие базовому классу:

 

this._get_class_name=CXBrObjectsContainer_get_class_name;

this._hierarchy_classes.push(this._get_class_name());

 

затем мы создаем массив для хранения входящих в контейнер объектов:

this._objects_list=new Array;

 

и определяем методы класса:

this._add=CXBrObjectsContainer_add;

this._add_object=CXBrObjectsContainer_add_object;

this._remove=CXBrObjectsContainer_remove;

this._send_message=CXBrObjectsContainer_send_message;

this._remove_all=CXBrObjectsContainer_remove_all;

this._get_by_id=CXBrObjectsContainer_get_by_id;

this._get_by_name=CXBrObjectsContainer_get_by_name;

this._global_get_by_name=CXBrObjectsContainer_global_get_by_name;

 

Описание полей и методов

Описание полей:

Поле

Тип

Назначение

_objects_list

Array

Массив объектов

 

Описание методов:

Метод

Аргументы

Возвращаемое значение

Назначение

CXBrObjectsContainer

Нет

Нет

Конструктор класса

_add

CXBrBaseInterfaceClass или его потомок

Добавленный объект

Добавляет объект в список. Кроме того, данный метод должен проверить, действительно ли добавляется объект потомок от нужного класса, а не число или строка, к примеру.

_remove

CXBrBaseInterfaceClass или его потомок, когда удаляем класс по ссылке на объект; или Number – номер удаляемого объекта; либо String – уникальный идентификатор объекта

Boolean -  признак успешного удаления

Удаляет из контейнера объект, с его уничтожением и уничтожением всех объектов, на которые он ссылается

_send_message

Array – массив, содержащий данные сообщения; Boolean – признак того, что сообщение уже обработано владельцем. Используется для устранения циклического рекурсивного «зависания».

Boolean -  признак того, что  сообщение послано и дальше его обрабатывать не нужно

Посылает сообщение контейнеру, контейнер при этом обрабатывает сообщение и при необходимости посылает нужным объектам, содержащимся в контейнере.

_remove_all

Нет

Нет

Удаляет все объекты из контейнера

_get_by_id

Number

CXBrBaseInterfaceClass или его потомок

Получает объект по ИД. Если не найден, то возвращает null

_get_by_name

String

CXBrBaseInterfaceClass или его потомок

Получает объект по имени. Если не найден, то возвращает null

_find_by_name

String

Number

Возвращает номер объекта с данным именем в контейнере. Если нет то -1

_global_get_by_name

String

CXBrBaseInterfaceClass или его потомок

Производит глобальный поиск по программному имени. Ищет не только в текущем контейнере, но так же в подчиненных контейнерах, контейнере владельце и всех подчиненных ему контейнеров до самого нижнего уровня. Возвращает объект с данным именем в контейнере. Если нет то null

 

А теперь тестовый пример, иллюстрирующий работу класса:

<html>

 

<head>

  <title></title>

    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript" SRC="XBrBase.js">

    </SCRIPT>

    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript" SRC="XBrGlobalVars.js">

    </SCRIPT>

    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript" SRC="XBrGlobalProc.js">

    </SCRIPT>

</head>

 

<body>

    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">

        var _id_=111

 

        function out_objects_list(ob) {

            var s=""

            for(i=0;i<ob._objects_list.length;i++) {

                s=s+ob._objects_list[i]._id+", "

            }

            return s

        }

 

        function CXBrObjectsContainer1() {

            CXBrObjectsContainer.call(this)

            this._get_name=CXBrObjectsContainer1_get_name

            this._hierarchy_classes.push(this._get_name())

            this._event_handler=CXBrObjectsContainer1_event_handler

        }

 

        function CXBrBaseInterfaceClass1() {

            CXBrBaseInterfaceClass.call(this)

            this._get_name=CXBrBaseInterfaceClass1_get_name

            this._hierarchy_classes.push(this._get_name())

            this._event_handler=CXBrBaseInterfaceClass1_event_handler

        }

 

        function CXBrBaseInterfaceClass1_get_name() { return "CXBrBaseInterfaceClass1" }

        function CXBrObjectsContainer1_get_name() { return "CXBrObjectsContainer1" }

 

        function CXBrObjectsContainer1_event_handler(msg) {

            document.write("CXBrObjectsContainer1 ("+this._id+"): Получено сообщение "+msg._type+

                " от "+msg._source_name+"("+msg._source_id+")<br>")

            return false

        }

 

        function CXBrBaseInterfaceClass1_event_handler(msg) {

            document.write("CXBrBaseInterfaceClass1 ("+this._id+"): Получено сообщение "+msg._type+

                " от "+msg._source_name+"("+msg._source_id+")<br>")

            if(this._id==_id_) return true; else return false

        }

 

        var cont = new CXBrObjectsContainer()

        document.write("<font size=5><b>Тестирование CXBrObjectsContainer</b></font><br>")

        document.write("<b>Тестирование метода _add</b><br>")

        cont._add(new CXBrBaseInterfaceClass())

        cont._add(new CXBrBaseInterfaceClass())

        cont._add(new CXBrBaseInterfaceClass())

        cont._add(new CXBrBaseInterfaceClass())

        document.write("cont._objects_list="+out_objects_list(cont)+"<br>")

        document.write("<b>Тестирование метода _get_by_id</b><br>")

        document.write("cont._get_by_id(2)="+cont._get_by_id(2)+"<br>")

        document.write("cont._get_by_id(2)._id="+cont._get_by_id(2)._id+"<br>")

        document.write("cont._get_by_id('2')._id="+cont._get_by_id('2')._id+"<br>")

        document.write("<b>Тестирование метода _remove</b><br>")

        cont._remove(2)

        document.write("Удалим по индексу (2) cont._objects_list="+out_objects_list(cont)+"<br>")

        cont._remove("2")

        document.write("Удалим по ID (2) cont._objects_list="+out_objects_list(cont)+"<br>")

        cont._remove(cont._objects_list[1])

        document.write("Удалим по объекту (индекс=1) cont._objects_list="+out_objects_list(cont)+"<br>")

        cont._add(new CXBrBaseInterfaceClass())

        cont._add(new CXBrBaseInterfaceClass())

        document.write("Добавим еще несколько объектов cont._objects_list="+out_objects_list(cont)+"<br>")

 

        document.write("<b>Тестирование передачи сообщения</b><br>")

        var cont1=new CXBrObjectsContainer1()

        var ob1=new CXBrBaseInterfaceClass1()

        cont1._add(new CXBrBaseInterfaceClass1())

        cont1._add(new CXBrBaseInterfaceClass1())

        cont1._add(new CXBrBaseInterfaceClass1())

        cont1._add(new CXBrBaseInterfaceClass1())

        document.write("ob1._owner="+ob1._owner+"<br>")

        cont1._add(ob1)

        document.write("ob1._owner="+ob1._owner+"<br>")

        var msg=new Array

        msg['_type']=1

        msg['_source_id']=ob1._id

        msg['_source_name']=ob1._get_name()

        ob1._owner._send_message(msg)

        document.write("<i>А теперь проверим, как прекращается обработка сообщений. Прекратиться должно на объекте ИД=11</i><br>")

        _id_=11

        ob1._owner._send_message(msg)

 

        document.write("<b>Тестирование метода _remove_all</b><br>")

        cont._remove_all()

        document.write("Теперь удалим все cont._objects_list="+out_objects_list(cont)+"<br>")

    </SCRIPT>

</body>

 

</html>

 

и результат его работы:

 

Тестирование CXBrObjectsContainer
Тестирование метода _add
cont._objects_list=2, 3, 4, 5,
Тестирование метода _get_by_id
cont._get_by_id(2)=[object Object]
cont._get_by_id(2)._id=2
cont._get_by_id('2')._id=2
Тестирование метода _remove
Удалим по индексу (2) cont._objects_list=2, 3, 5,
Удалим по ID (2) cont._objects_list=3, 5,
Удалим по объекту (индекс=1) cont._objects_list=3,
Добавим еще несколько объектов cont._objects_list=3, 6, 7,
Тестирование передачи сообщения
ob1._owner=null
ob1._owner=[object Object]
CXBrObjectsContainer1 (8): Получено сообщение 1 от CXBrBaseInterfaceClass1(9)
CXBrBaseInterfaceClass1 (10): Получено сообщение 1 от CXBrBaseInterfaceClass1(9)
CXBrBaseInterfaceClass1 (11): Получено сообщение 1 от CXBrBaseInterfaceClass1(9)
CXBrBaseInterfaceClass1 (12): Получено сообщение 1 от CXBrBaseInterfaceClass1(9)
CXBrBaseInterfaceClass1 (13): Получено сообщение 1 от CXBrBaseInterfaceClass1(9)
А теперь проверим, как прекращается обработка сообщений. Прекратиться должно на объекте ИД=11
CXBrObjectsContainer1 (8): Получено сообщение 1 от CXBrBaseInterfaceClass1(9)
CXBrBaseInterfaceClass1 (10): Получено сообщение 1 от CXBrBaseInterfaceClass1(9)
CXBrBaseInterfaceClass1 (11): Получено сообщение 1 от CXBrBaseInterfaceClass1(9)
Тестирование метода _remove_all
Теперь удалим все cont._objects_list=

 

 

 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги