Показать сообщение отдельно
Старый 26.12.2006, 07:32
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 3  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
По умолчанию Компонент TextInput с поддержкой AutoComplete

Автор Оригинала: Krxtopher
Оригинал: Remembering TextInput values for returning users

Проблема

В Flex приложениях в отличии от стандартных (DHTML)\AJAX текстовые поля ввода не "запоминают" значения, которые пользователь ввел в них.

Решение

Создадим наследуемый от mx.controls.TextInput класс, который будет сохранять вводимые пользователем значения в SharedObject. В запусках приложения пользователем, компонент будет "забирать" значения ранее введеные пользователем.

Описание

Современные браузеры имеют запоминать введеную пользователем информацию, в текстовые поля, чтобы пользователь не перепечатывал, их каждый раз. Обычно это заметно при вводе адресса почты или пользовательского имени, по умолчанию Flex приложения не подерживают такой функционал, что в резутате может оставить не благоприятные ощущения у пользователя, который ожидает подержки данного функционала.

Приведеный ниже компонент решает эту проблему в рамках одного приложения.

Компонент наследует класс TextInput, он добавляет свойство и статический метод к API TextInput'а.

persistenceId - идентификатор хранилища с которым вы бы хотели "связать" компонент (например "login" или "email").

clearStoredValues() - очищает SharedObject.

Код:
package custom
{
    import flash.events.Event;
    import flash.net.SharedObject;
    import mx.controls.TextInput;
    
    public class PersistentTextInput extends TextInput
    {
        /**
         * The ID this component will use to save and later look up its
         * associated value.
         */
        public var persistenceId:String = null;
        
        /**
         * The SharedObject name to use for storing values.
         */
        private static const LOCAL_STORAGE_NAME:String = "persistentTextInputStorage";
        
        /**
         * Clears previously stored values for all PersistentTextInput instances.
         */
        public static function clearStoredValues() :void
        {
            var so:SharedObject = SharedObject.getLocal(LOCAL_STORAGE_NAME);
            so.clear();
        }
        
        /**
         * Handles initialization of this component.
         */
        override public function initialize() :void
        {
            super.initialize();
            addEventListener(Event.CHANGE, handleChange);
            restoreSavedValue();
        }
        
        /**
         * Event handler function for CHANGE events from this instance.
         */
        protected function handleChange(event:Event) :void
        {
            saveCurrentValue();
        }
        
        /**
         * Restores the previously saved value associated with the
         * persistenceID of with this instance.
         */
        protected function restoreSavedValue() :void
        {
            if (persistenceId != null)
            {
                var so:SharedObject = SharedObject.getLocal(LOCAL_STORAGE_NAME);
                var value:String = so.data[persistenceId];
                if (value != null)
                {
                    text = value;
                }
            }
        }
        
        /**
         * Saves the text value of this instance. Associates the value with
         * the persistenceId of this instance.
         */
        protected function saveCurrentValue() :void
        {
            if (persistenceId != null)
            {
                var so:SharedObject = SharedObject.getLocal(LOCAL_STORAGE_NAME);
                so.data[persistenceId] = text;
                so.flush();
            }
        }
    }
}
Ниже пример приложения, который показывает, как вы можете использовать компонент. Для проверки работы приложения, просто откройте его, наберите что либо в компоненте, после чего перегрузите приложение.

Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:custom="custom.*" layout="vertical">
    
    <mx:Script>
        <![CDATA[
            import custom.PersistentTextInput;
            
            public function clearValues() :void
            {
                PersistentTextInput.clearStoredValues();
                message.text = "A page refresh will reveal that the values have not persisted.";
            }
        ]]>
    </mx:Script>
    
    <custom:PersistentTextInput id="firstNameInput" 
        persistenceId="firstName" />
    <custom:PersistentTextInput id="lastNameInput" persistenceId="lastName" />
    <mx:Button label="Clear Persistent Values" click="clearValues()" />
    <mx:Label id="message" />
    
</mx:Application>
Исходник
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^