代码之家  ›  专栏  ›  技术社区  ›  karl nickel

AS3通过函数应用格式

  •  1
  • karl nickel  · 技术社区  · 11 年前

    我正在尝试编写一个函数,将TextFormats应用于它们所属的TextFields。 问题是,我无法将其转化为正确的“形式”(如果有合适的形式的话)。

    我的函数现在是这样的

    function applyFormat(TextFild:String,Format:String,EmbFont:String,NameInJson:String){
    
    //
    //example:applyFormat("myTextField","myTextFormat","myFont","TextStuff")
    //  
    //myData=json object
    //all textfields etc. already exist. Just anyone wants to ask if they've been already generated.
    
    //at first i thought it could be as easy as this
    this[Format].font=myData.NameInJson.Font //doesn't work obviously
    
    //then I tried this method
    this[Format].font=myData.this[NameInJson].Font //doesn't work either
    
    //couldn't find a real solution for this on the internet...    
    //how it should turn out in the end: myTextFormat.font=myData.TextStuff.Font
    }
    

    myData的相关部分如下所示:

    "TextStuff":
    {
    "Font":"Arial",
    "Size" : "16",
    "Bold" : "true",
    "Color" : "0xFFFFFF"
    }
    

    我需要更改我的Json文件吗? 我是否忽略了处理此类变量/值的方法?

    1 回复  |  直到 11 年前
        1
  •  1
  •   Barış Uşaklı    11 年前

    this[Format] 将在名为Format的类上查找属性。AFAIK类必须是动态的才能工作。

    如果你保持 TextFormat 该类中对象中的实例将更易于管理:

    // this is a property in the class
    private var _textFormats:Object = {};
    
    // create and store text formats in the object
    var textFormat:TextFormat = new TextFormat();
    _textFormats["myTextFormat"] = textFormat;
    

    现在假设您得到一个JSON文本字符串,如下所示:

    {
    "TextStuff":{
        "Font":"Arial",
        "Size" : "16",
        "Bold" : "true",
        "Color" : "0xFFFFFF"
      }
    }
    

    以下内容应适用于此调用 applyFormat("myTextField","myTextFormat","myFont","TextStuff")

    function applyFormat(TextField:String, Format:String, EmbFont:String, NameInJson:String):void
    {
        var myData:Object = JSON.parse(theJSonString);
        _textFormats[Format].font = myData[NameInJson].Font;
    }