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

Джерела даних (Data providers)

 Flex  RIA  Flash

Джерела даних (Data providers) і властивість ідентифікатора користувача (uid property)

Оскільки об'єкт (Object) і масив (Array) класів є динамічними, то зазвичай нічого не робиться спеціально для об'єктів даних, елементи яких належать цим класам. Однак, потрібно розглянути реалізацію IUID, якщо ваші елементи об'єкту даних належать до класів користувача, які ви визначаєте.

    Примітка:
    Коли Flex створює UID для об’єкта, такого як елемент у масиві ArrayCollection, він додає UID як властивість mx_internal_uid даного елементу. Flex створює властивості mx_internal_uid для будь-яких об'єктів, які є динамічними і не мають властивостей можливості прив’язки. Для того, щоб уникнути створення властивостей mx_internal_uid, для класу об'єкта повинна виконуватися будь-яка з наступних умов: наявність хоча б однієї властивості з тегом метаданих [Bindable]; реалізація інтерфейсу IUID; або наявність властивості uid зі значенням.

Якщо Flex повинен розглянути два або більше різних об'єктів як ідентичні, об'єкти повинні реалізувати інтерфейс IUID, так що можна призначити те саме значення uid кільком об'єктам. Типовий випадок, коли необхідно реалізувати інтерфейс IUID — це програма, яка використовує розбиті на сторінки колекції. З рухом курсору по множині, окремий елемент може бути знесений з сервера і повторно виведений з пам'яті. Щоразу, коли елемент заноситься в пам’ять, для його представлення створюється новий об'єкт. Якщо потрібно порівняти рівність елементів, Flex повинен розглянути всі об’єкти, які представляють один і той же елемент, як "одне ціле".

Більш загальним, ніж випадок, де необхідно реалізувати інтерфейс IUID, є випадок, де при цьому можна поліпшити ефективність обробки. Як правило, інтерфейс IUID не реалізується, якщо елементи постачання даних є членами динамічних класів. Flex може автоматично створювати властивість uid для цих класів. Існує деяка неефективність, однак, можна розглядати реалізацію інтерфейсу IUID, якщо ефективність обробки даних особливо важлива.

В усіх інших випадках Flex використовує механізм словника (Dictionary mechanism) для управління uid, який не може бути настільки ж ефективним, як постачання власного UID.

Інтерфейс IUID містить одну властивість, uid, яка є унікальним ідентифікатором для члену класу, і жодного методу. Flex надає клас UIDUtil, який використовує генератор псевдо-випадкових чисел для створення ідентифікатора, який відповідає стандарту формату GUID. Хоча не гарантовано , що цей ідентифікатор э універсально унікальним, він повинен бути унікальним серед усіх членів класу. Для реалізації класу, який використовує клас UIDUtil, такого, як клас суб’єкту (Person class) , який має поля для імені, прізвища та ID, можна використовувати наступний шаблон:

package {
    import mx.core.IUID;
    import mx.utils.UIDUtil;
    [Bindable]
    public class Person implements IUID {
        public var id:String;
        public var firstName:String;
        public var lastName:String;
        private var _uid:String;
        public function Person() {
            _uid = UIDUtil.createUID();
        }
        public function get uid():String {
            return _uid;
        }
        public function set uid(value:String):void {
            // Do nothing, the constructor created the uid.
        }
    }
}

Не потрібно використовувати клас UIDUtil у випадку, коли об'єкти містять унікально ідентифіковане поле, таке як ID працівника (employee ID). У цьому випадку, можна використовувати ID особи (person's ID),тому що значення властивості uid унікально ідентифікує об’єкт тільки в постачальнику даних. Наступний приклад реалізує цей підхід:

package 
{
    import mx.core.IUID;
    [Bindable]
    public class Person implements IUID {
        public var employee_id:String;
        public var firstName:String;
        public var lastName:String; 
        public function get uid(): String {
            return employee_id;
        }
        public function set uid(value: String): void {
            employee_id=value;
        }
    }
} 
    Примітка:
    Копіювання об'єкту не проводиться або має зв’язок з UID’ам. Так що якщо копіюється елемент, що має внутрішній UID, необхідно також змінити і цей внутрішній UID. UID’и зберігаються в mx_internal_uid тільки для динамічних об'єктів. Екземпляри класів даних, які реалізують IUID, зберігають свої UID’и у властивості uid, так що то така властивість, яка повинна змінитися після копіювання.
загрузка...
Сторінки, близькі за змістом