Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   AS3 Data binding to XML (http://www.flasher.ru/forum/showthread.php?t=118777)

UX.ISCo 03.12.2008 16:14

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, время: 22:19.

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