2011-09-19 2 views
0
public class ColorLibrary { 
    private var _allColorCodes:Object; 

    public function ColorLibrary() { 
     init(); 
    } 

    private function init(){ 
     _allColorCodes = { 
      'black'  : '000000', 
      'white'  : 'FFFFFF', 
      'yellow' : '000000' 
     } 
    } 

    public function exchangeColor(colors:String){ 
     var colorArray:Array = colors.split(','); 
     for (var i:int = 0; i < colorArray.length; i++) { 
      _allColorCodes.getDefinitionByName(colorArray[i]); 
     } 

    } 

} 

любая идея как преобразовать строку в имя экземпляра? Большое спасибо ~! Strugglying здеськак преобразовать строку в имя объекта. as3

+0

Что вы хотите достичь своей функцией (exchangeColor)? – Mattias

ответ

1

Я не могу понять, почему вы хотели бы сделать это так, но здесь это функция, которая передает список цветов (String) и возвращает шестнадцатеричные коды (Array). Если один цвет не существует, вы потеряете его в массиве. Я рекомендую использовать ColorList.RED или не менее ColorManager.getColor("red").

var colorList : Array = getColorList("black,yellow"); 

public function getColorList(colors : String) : Array 
{ 
    var result : Array = new Array(); 
    var colorArray : Array = colors.split(','); 

    for(var i : int = 0; i < colorArray.length ; i++) 
    { 
     if(_allColorCodes[colorArray[i]]) 
      result.push(_allColorCodes[colorArray[i]]); 
    } 

    return result; 
} 
+0

Wow Большое спасибо, ваше решение - это то, за чем я после, и он отлично работает. хочу проголосовать за свое решение, но моей репутации недостаточно :(снова спасибо за помощь! – user775735

2

У тебя уже есть объект там, так что вы уже можете пойти:

_allColorCodes.black .. и т.д.

Учитывая, что _allColorCodes является private, вы можете сделать очень миленький добытчик, как так:

public function get colorCode():Object 
{ 
    return _allColorCodes; 
} 

А потом просто:

trace(colorCode.black); 
trace(colorCode.yellow); 

Все, что сказал, что я хотел бы сделать, это хранить все эти вещи от констант в классе, как ColorCodes, как это:

package 
{ 
    public class ColorCodes 
    { 
     public static const BLACK:uint = 0x000000; 
     public static const RED:uint = 0xFF0000; 
     public static const BLUE:uint = 0x0000FF; 
     public static const GREEN:uint = 0x00FF00; 
     public static const WHITE:uint = 0xFFFFFF; 
    } 
} 

А затем получить доступ к ним через:

trace(
    ColorCodes.RED 
); 

что-то чуть более продвинутые что вы можете сделать, это использовать Proxy и flash_proxy для переопределения метода getProperty(). Это означает, что вы будете в состоянии пойти ColorLibrary.color прямо с битой:

package 
{ 
    import flash.utils.Proxy; 
    import flash.utils.flash_proxy; 

    public class ColorLibrary 
    { 
     private var _allColorCodes:Object; 

     public function ColorLibrary() 
     { 
      _allColorCodes = { 
       'black'  : '000000', 
       'white'  : 'FFFFFF', 
       'yellow' : '000000' 
      } 
     } 

     override flash_proxy function getProperty(name:*)* 
     { 
      return _allColorCodes[name]; 
     } 
    } 
} 

Ответ на комментарий:

Хорошо, что вам не нужно использовать getDefinitionByName здесь, вы можете просто используйте скобки для доступа к значению объекта путем разбора строки.

Пример:

var object:Object = { 
    something: 2, 
    anotherThing: "something awesome" 
}; 

trace(object["something"]); // same as object.something 
trace(object["anotherThing"]); // same as object.anotherThing 

Try что-то подобное для exchangeColor() функции:

public function exchangeColor(colors:String):void 
{ 
    var colorArray:Array = colors.split(','); 

    for each(var i:String in colorArray) 
    { 
     trace(
      _allColorCodes[i] 
     ); 
    } 
} 
+0

Спасибо за быстрый ответ, но моя ситуация у меня есть строка цветов var color: String = 'black, white, yellow'; и я использую split для преобразования массива , затем используйте этот массив для поиска объекта и возврата шестнадцатеричного числа. Я хочу это _allColorCodes.colorArray [i], но это не сработает. есть идеи? – user775735

+0

Ничего себе это очень причудливо, первый раз увидеть это. NICE я попробую. Большое спасибо – user775735

+0

Смотрите правки .. Надеюсь, что это помогает. – Marty

Смежные вопросы