→ Пошук по сайту       Увійти / Зареєструватися
Знання Adobe Flex — технологія швидкої розробки RIA

Опис моделі даних (Defining a data model)

 Flex  RIA  Flash

Модель даних можна визначити в тезі MXML, в функції ActionScript або в класі ActionScript. Загалом, потрібно використовувати моделі на основі MXML для простих структур даних, а ActionScript — для більш складних структур і бізнес–логіки (бізнес–логіка — це програмний код, який реализує функціональність застосунку) на стороні клієнта.

    Примітка:
    теги <mx:Model> і <mx:XML> — це теги компілятора Flex, і вони не відповідають безпосередньо класам ActionScript. Adobe Flex Language Reference містить інформацію про ці теги і інші теги компілятора. На головній сторінці Adobe Flex Language Reference зайдіть на лінк Appendixes.

Можна розмістити тег <mx:Model> або <mx:XML> в файл Flex– застосунку або у файл компонента MXML. Тег повинен мати значення ідентифікатора (id value), і це не має бути кореневої тег компонента MXML.

Тег <mx:Model>

Найбільш поширеним типом моделі на основі MXML є тег <mx:Model>, який компілюється в об’єкт ActionScript типу mx.utils.ObjectProxy, що містить дерево об'єктів, коли дані знаходяться в ієрархічному порядку без інформації про тип. Листя об’єкта дерева — це скалярні величини. Через те, що моделі, які визначені в тегах <mx:Model>, не містять інформації про тип або бізнес–логіку, потрібно використовувати їх тільки в найпростіших випадках. При бажанні додати бізнес–логіку або коли потрібні введені властивості, визначте моделі у класах ActionScript.

Наступний приклад показує працюючу модель, описану у тезі <mx:Model>:

<?xml version="1.0"?>
<!-- Models\ModelsModelTag.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Model id="employeemodel">
        <employee>
            <name>
                <first/>
                <last/>
            </name>
            <department/>
            <email/>
       </employee>
    </mx:Model>    
</mx:Application>

Дочірній тег <mx:Model> без значення приймають за нульовий. У випадку, коли бажаний порожній рядок, можна використовувати вираження прив'язки як значення тегу, як показано в наступному прикладі:

<?xml version="1.0"?>
<!-- Models\ModelTagEmptyString.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Model id="employeemodel">
        <employee>
            <name>
                <!--Fill the first property with empty string.-->
                <first>{""}</first> 
                <!--Fill the last property with empty string.-->
                <last>{""}</last> 
            </name>
            <!--department is null-->
            <department/> 
            <!--email is null-->
            <email/> 
        </employee>
    </mx:Model>    
</mx:Application>

Тег <mx:XML>

An <mx:XML> tag represents literal XML data. Setting the format property to e4x creates an XML object, which implements the powerful XML–handling standards defined in the ECMAScript for XML specification (ECMA–357 edition 2) (known as E4X). For backward compatibility, when the format property is not explicitly set to e4x, the type of the object created is flash.xml.XMLNode.

Тег <mx:XML> представляє символьні дані XML. Встановлення властивості формату в e4x створює об'єкт XML, який реалізує потужні стандарти XML–обробки, визначені в ECMAScript для специфікації XML (ECMA–357 edition 2) (відомий як E4X). Для зворотної сумісності, коли властивість формату не встановлена в e4x, тип створеного об'єкта — flash.xml.XMLNode.

    Примітка:
    На даний момент не можна використовувати вузол як джерело прив’язки в межах моделі даних <mx:XML>.

Моделі на основі скрипту (Script–орієнтована модель)

Як альтернативу використання моделі на основі MXML можна визначити модель як змінну в тезі <mx:Script>. Наступний приклад показує дуже просту модель, визначену в блоці скрипту ActionScript. Було б простіше оголосити цю модель в тезі <mx:Model>.

<?xml version="1.0"?>
<!-- Models\ScriptModel.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            [Bindable]
            public var myEmployee:Object={
                name:{
                    first:null,
                    last:null
                    },
                department:null,
                email:null
            };
        ]]>
    </mx:Script>   
</mx:Application>

У використанні моделей на основі скрипту немає переваг порівняно з моделями на основі MXML; не можна визначати властивості моделі на основі скрипту. Щоб їх визначити, потрібно використати модель на основі класу.

Моделі на основі класу

Використання класу ActionScript як моделі — гарна альтернатива, якщо потрібно зберігати складні структури даних з визначеними властивостями, або коли потрібно виконати бізнес–логіку на стороні клієнта, використовуючи дані за стосунку. Також, визначення інформації в моделі на основі класу, коли модель передається до служби даних на стороні серверу.

Наступний приклад показує модель. Визначену у класі ActionScript. Ця модель використовується для зберігання елементів кошику для віртуальних покупок в інтернет–магазині. Також забезпечується бізнес–логіка у формі методів для додавання і видалення елементів, отримання рахунку елементу та отримання загальної ціни. Для більш детальної інформації по компонентам ActionScript, див. Creating and Extending Adobe Flex 3 Components.

package
{
[Bindable]
public class ShoppingCart {
    public var items:Array = [];
    public var total:Number = 0;
    public var shippingCost:Number = 0;
    public function ShoppingCart() {
    }
    public function addItem(item:Object, qty:int = 1,
        index:int = 0):void {
        items.splice(index, 0, { id: item.id,
        name: item.name,
        description: item.description,
        image: item.image,
        price: item.price,
        qty: qty });
        total += parseFloat(item.price) * qty;
}
    public function removeItemAt(index:Number):void {
        total -= parseFloat(items[index].price) * items[index].qty;
        items.splice(index, 1);
        if (getItemCount() == 0)
        shippingCost = 0;
}
    public function getItemCount():int {
        return items.length;
    }
    public function getTotal():Number {
        return total;
    }
}
}
    Примітка:
    можна використовувати властивості будь–якого визначеного типу в моделі на основі класу. Наприклад, можна створити клас Працівника (Employee), потім визначити типу Працівника в іншому класі, який імпортує Працівника.

Модель на основі класу оголошується як тег компоненту ActionScript у файлі MXML, як показано в наступному прикладі:

<local:ShoppingCart id=«cart» xmlns:local=«*»/>

Цей компонент є тим самим каталогом у файлі MXML, що і визначене в XML значення простору імен. Для більш детальної інформації про визначення розташування компонентів, див. розділ Creating and Extending Adobe Flex 3 Components.

загрузка...
Сторінки, близькі за змістом