Убедитесь, что свойство данных AS3 SharedObject существует - PullRequest
3 голосов
/ 31 января 2011

Как мне проверить, существуют ли определенные свойства SharedObject? Другими словами, я хочу убедиться, что я читаю что-то разумное из моего локального SharedObject (не нужно ничего хорошего при первой загрузке SWF)

Я исхожу из информации, найденной на http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/net/SharedObject.html

Допустим, я определяю

var my_so:SharedObject = SharedObject.getLocal("superfoo");

Теперь, если я уже получил что-то под my_so.data.foobar, я хотел бы использовать это в своем приложении. (myapp.myfoo уже имеет значение по умолчанию до этого)

if (my_so.data.foobar != null) myapp.myfoo=my_so.data.foobar;

Это похоже на Flash 10.1. Чего мне не хватает?

РЕДАКТИРОВАТЬ: Благодаря вашей помощи проблема устранена. :)

Однако было бы неплохо увидеть идиоматический способ выполнения такого рода проверки для SharedObject. Я нашел много примеров, в которых рассказывается, как использовать SharedObject, но, похоже, они затмевают тот факт, что вам нужно проверить, сохранили ли вы что-нибудь стоящее в нем. Это именно то, что происходит при загрузке .swf в первый раз. Другой проблемой будет проверка того, успешно ли создан экземпляр SharedObject (например, когда он отключен), но это был бы совсем другой вопрос ...

Ответы [ 2 ]

6 голосов
/ 01 февраля 2011

Я подозреваю, что вы столкнулись с проблемой «ноль против неопределенной».

Я бы попробовал использовать метод hasOwnProperty :

if (my_so.data.hasOwnProperty("foobar")) myapp.myfoo=my_so.data.foobar;

Существует несколько методов определенияимеет ли объект конкретное свойство, но hasOwnProperty (), вероятно, является лучшим способом сделать это.

3 голосов
/ 01 февраля 2011

Я предпочитаю:

if ("foo" in someObject)
{
    // Do stuff
}
...