Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.12.2008, 16:14
UX.ISCo вне форума Посмотреть профиль Отправить личное сообщение для UX.ISCo Найти все сообщения от UX.ISCo
  № 1  
Ответить с цитированием
UX.ISCo

Регистрация: Oct 2008
Сообщений: 3
По умолчанию AS3 Data binding to XML

такая вот проблема:
существует компонент some_component который вставляется в Application. В Application MXML'ом ему задается свойство
Код AS3:
public var some_var: XML;
Код:
<some_component some_var="{some__bindable_value}" />
Когда изменяется some__bindable_value то some_var тоже меняется... Компонент some_component создает динамически еще некоторые компоненты которым передается некоторая выборка из some_var:
Код AS3:
var dynamic_component: DynamicComponent = new DynamicComponent();
dynamic_component.some_property = some_var.item.(@name=='name')[0];
Вопрос - как сделать так чтобы data binding в dynamic_component тоже работала?
Код AS3:
BindingUtils.bindProperty(dynamic_component, 'some_property', some_var.item.(@name=='name'), '0');
- some_property меняется только 1 раз, когда вызывается метод bindProperty, далее изменения в some__bindable_value никак не влияют.
PS: гугл не хочет выдавать то что мне нужно.

Добавлено через 7 часов 17 минут
Понятно... пока сам не влезешь в то что генерирует Flex Builder ничего не будет.

Добавлено через 9 часов 4 минуты
Если кому будет интересно (я уже разобрался до сих пор =)):
Код AS3:
//импорт необходимых классов
import mx.binding.Binding;
import mx.binding.PropertyWatcher;
import mx.binding.XMLWatcher;
 
//исходное свойство
[Bindable]
private var src_prop: XML = 
  <root>
    <item0>
      <item1 name="some name" />
    </item0>
  </root>;
 
//результирующее свойство
private var dest_prop: XML;
 
//функция которая связывает dest_prop как dest_prop = src_prop..item1.@name
private function bindProp(): void {
  var binding:Binding;
//Создает объект для связывания.
// public function Binding(document:Object, srcFunc:Function,
//						    destFunc:Function, destString:String)
//document - это документ, который является целью всей этой работы. 
//  (в большинстве случаев это будет this)
//srcFunc - это функция, которая возвращает значение которое 
// задается результирующему свойству
//destFunc - функция, которая будет принимать значения
//  и назначать его результирующему свойству.
//destString - результирующее свойство которое представляется в виде строки 
  binding = new Binding(
    this,
    function(): * {
      return src_prop..item1.@name;
    },
    function(_sourceFunctionReturnValue:*):void {
      dest_prop = _sourceFunctionReturnValue;
    },
    'dest_prop'
  );
 
//PropertyWatcher - нужен если заменяется значение свойства
//public function PropertyWatcher(propertyName:String,
//                                    events:Object,
//                                    listeners:Array,
//                                    propertyGetter:Function = null)
//propertyName - наименование свойства для просмотра.
//events - события которые указывают что свойство изменилось 
//  (обычно это {propertyChange: true}).
//listeners - массив Binding объектов, которые слушают этот Watcher.
//propertyGetter - функция-помощник которая используется для доступа 
//  непубличный переменных.
  var watcher: PropertyWatcher = new PropertyWatcher(
    'src_prop', 
    {propertyChange: true},
    [binding],
    function(propertyName:String):* {return this[propertyName];}
  );
 
  watcher.updateParent(this);
//XMLWatcher - нужен если меняется значение какой то ветки XML'а
//addChild - добавляет watcher'a, который будет наблюдать за 
//  измениями внутри свойства.
  watcher.addChild(new XMLWatcher('item1', [binding]));
 
//исполняет присваивание dest_prop = src_prop..item1.@name
  binding.execute();
}
Если кому то нужно будет связать данные не с XML а с другими типами данных то ищите в Flex SDK. Там также есть такие классы как
Код AS3:
  ArrayElementWatcher
  FunctionReturnWatcher
  RepeaterComponentWatcher
  RepeaterItemWatcher
  StaticPropertyWatcher

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:22.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.