Синтаксис индекса ('content [' xxx '] ") для доступа к членам .SWF - PullRequest
0 голосов
/ 14 декабря 2010

На самом деле я искал в Интернете документы Adobe, которые бы охватывали следующий синтаксис:

SWFLoader (event.target) .content [ 'wrFont']

Это из моего собственного кода, так что, конечно, я знаю, что он работает, просто после 2 лет программирования на Flex я до сих пор не встречал какой-либо формальной документации по правилам, регулирующим этот метод доступа (например, как в приведенном выше примере, где Я получаю доступ к члену wrFont загруженного SWF через синтаксис индекса массива и строку.

В частности, это будет что-то вроде определения того, существует ли элемент, на который есть ссылка, - какой будет стандартный метод для этого (конечно, не просто блок try-catch, верно?). Но не только это, но и официальная документация Adobe по всем соответствующим аспектам вышеупомянутого. Я загрузил все архивированные документы Adobe с их сайта с живыми документами - где все это полностью задокументировано.

На заметке, что всегда раздражало меня в Google, это то, что при поисковой строке, такой как ".content [", он просто игнорирует символ "[" как нерелевантный, хотя, если бы я мог просто найти эту строку поиска, я бы есть мой ответ. Но Google не ищет такие символы, как "[", очевидно. Бинг тоже. Любая поисковая система делает это.

Ответы [ 3 ]

2 голосов
/ 14 декабря 2010

[and] - доступ к «массиву» - может использоваться для ЛЮБОГО объекта или его производного (то есть всего, кроме чисел, строк, логических значений).

Чтобы правильно увидеть, существует ли дочерний элемент, используйте метод .hasOwnProperty.

1 голос
/ 14 декабря 2010

Если вы хотите убедиться, что ваш данный участник существует, вы тестируете код следующим образом:

if(SWFLoader(event.target).content['wrFont']) = null)

Но это не очень рекомендуется, потому что вы на самом деле этого не делаете, если тип загружаемого вами контентана самом деле имеет это свойство или нет.

Что вы должны сделать в вашем случае, приведите свойство «content» SWFLoader к его реальному классу или, что еще лучше, используйте интерфейс для развязки ваших SWF-файлов:

public interface IWRFontContainer {
   function get wrFont():Font;
}

Сделайте так, чтобы ваш основной / документный класс SWF реализовал этот интерфейс, а затем приведите содержимое к тому месту, где вы его загружаете:

var swf:IWRFontContainer = SWFLoader(event.target).content as IWRFontContainer;
trace(swf.wrFont);

Чтобы убедиться, что ваш контент имеет тип IWRFont, вы можете проверитьвведите is для проверки типа или используйте блок try / catch.

0 голосов
/ 18 декабря 2010

Объект ASDoc имеет некоторое объяснение: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Object.html

"Все классы, которые не объявляют явный базовый класс, расширяют встроенный класс Object.

Вы можете использовать класс Object для создания ассоциативных массивов. По своей сути ассоциативный массив является экземпляром класса Object, и каждая пара ключ-значение представлена ​​свойством и его значением. Другая причина объявления ассоциативного массива с использованием типа данных Object заключается в том, что вы можете использовать литерал объекта для заполнения вашего ассоциативного массива (но только в тот момент, когда вы его объявляете). В следующем примере создается ассоциативный массив с использованием литерала объекта, доступ к элементам с использованием оператора точки и оператора доступа к массиву, а затем добавление новой пары ключ-значение путем создания нового свойства: ... "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...