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";
Надеюсь, это поможет!