flex: присвоение идентификатора примитивам

Я создал несколько гибких примитивов на экране с помощью сценария действия. Теперь, основываясь на бизнес-логике, мне нужно внести изменения в некоторые из этих примитивов, например: изменить толщину, направление стрелки и т. д.

Одна мысль заключалась в том, чтобы присвоить идентификаторы этим примитивам по мере их создания — как мне это сделать?

например Я получаю строку, построенную, как показано ниже

var myShape:Shape=new Shape();    
myShape.graphics.lineStyle(thickness,color);    
myShape.graphics.moveTo(XFrom,YFrom);    
myShape.graphics.lineTo(XTo,YTo);

Если, основываясь на каком-то условии, я хочу изменить цвет/толщину выше, как мне сослаться на эту строку выше?


person RG1967    schedule 21.04.2011    source источник


Ответы (2)


Можно предположить, что это делается внутри какого-то компонента. Все UIComponents имеют жизненный цикл, который вы хотите придерживаться. Вы можете переопределить несколько функций, чтобы получить желаемую функциональность. Так:

private var _shape:Shape;

override protected function createChildren():void
{
   super.createChildren();
   if(!this._shape)
   {
      this._shape = new Shape();
      addChild(this._shape);
   }

}

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
   super.updateDisplayList(unscaledWidth, unscaledHeight);

   this._shape.graphics.lineStyle(thickness,color);    
   this._shape.graphics.moveTo(XFrom,YFrom);    
   this._shape.graphics.lineTo(XTo,YTo);
}

И если вы хотите, чтобы он запускался при изменении данных, вам следует заглянуть в invalidateDisplayList, который вы вызовете после того, как все данные изменились, и он запустит функцию updateDisplayList в следующем кадре.

person J_A_X    schedule 21.04.2011

Я придумал более простой подход

По сути, вместо того, чтобы рисовать примитивы напрямую, назначьте рисование функции формы, которая вернет объект Shape.

Теперь примитивная строка имеет простой обработчик для изменения свойств. дайте мне знать, если вам нужны более конкретные сведения о том, как этого добиться

person RG1967    schedule 27.04.2011