JSFL Как установить имя экземпляра только что добавленного текстового поля?

Я только начал работать с JSFL в Adobe Flash и пытаюсь добавить текстовое поле во вновь созданный слой, а затем изменить его имя экземпляра на "свойства".

Вот мой код:

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 Создание текстового поля свойств

И я получаю следующую ошибку при тестировании нового флеш-документа TypeError:propertiesLayer.frames[0].elements[0] не имеет свойств

Я в растерянности, и любая помощь будет очень цениться.

2 ответа

Решение

Модифицировал ваш код и все работает. Ниже приведена только часть, где я изменил код. Нужны еще улучшения, хотя.

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";   

 }

При вызове addNewText() тип созданного текстового поля является последним типом, который был создан. Таким образом, если вы создали статическое поле, а затем запустили свой код, он вывел бы ошибку, как вы видели, потому что статические текстовые поля не могут иметь имен экземпляров (которые задаются с помощью свойства "name"). Вот быстрое решение вашей проблемы:

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

Надеюсь, это поможет!

Другие вопросы по тегам