JSFL如何设置刚刚添加的文本字段的实例名称?

时间:2012-12-27 22:41:51

标签: flash textfield jsfl

我刚开始在Adobe Flash中使用JSFL,我正在尝试将文本字段添加到新创建的图层,然后将其实例名称更改为“properties”。

这是我的代码:

fl.outputPanel.clear();

var document = fl.getDocumentDOM();

var timeline = document.getTimeline();

var layers = timeline.layers;

var propertiesLayer = null;

var propertiesTextBox = null;

var layerIndex = 0;

fl.trace("Searching For Properties Layer");

for (var index in layers)
{
    if(layers[index].name == "properties")
    {
        propertiesLayer = layers[index];
        layerIndex = index;
    }
}

if(!propertiesLayer)
{
    fl.trace("Creating Properties Layer");
    timeline.addNewLayer("properties");
    layerIndex = timeline.findLayerIndex("properties");

    fl.trace("Properties Layer Index is " + layerIndex);
    propertiesLayer = layers[layerIndex];

    timeline.setSelectedLayers(layerIndex * 1);

    fl.trace("Creating Properties Text Field");
    document.addNewText({left:0, top:-100, right:100, bottom:0});

    propertiesLayer.frames[0].elements[0].name = "properties";

    fl.trace("Setting Properties Text Field's Instance Name");
    //propertiesTextBox.name = "properties";

    fl.trace("Setting Properties Text Field");
    document.setTextString("test");
}

我的输出窗口显示: 搜索属性层 创建属性层 属性层索引为0 创建属性文本字段

在测试新的Flash文档时出现以下错误 TypeError:propertiesLayer.frames [0] .elements [0]没有属性

我很茫然,任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

修改了你的代码并且它有效。以下是我修改代码的部分。但是需要一些改进。

if(!propertiesLayer)
{
      timeline.addNewLayer("properties");
      layerIndex = timeline.findLayerIndex("properties");

      propertiesLayer = layers[layerIndex];

      timeline.setSelectedLayers(0);

      document.addNewText({left:0, top:-100, right:100, bottom:0});

      document.setTextString("test");

      var element = document.selection[0];

      document.selection[0].textType = "dynamic";
      element.name = "properties";   

 }

答案 1 :(得分:0)

调用addNewText()时,创建的文本字段类型是最后创建的类型。因此,如果您创建了一个静态字段,那么运行您的代码会因为您看到错误输出,因为静态文本字段不能包含实例名称(使用“name”属性设置)。以下是您的问题的快速解决方法:

propertiesLayer.frames[0].elements[0].textType = "dynamic";
propertiesLayer.frames[0].elements[0].name = "properties";

希望有所帮助!