2011-01-31 2 views
2

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

Я иду от информации, найденной на 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. Что мне не хватает?

EDIT: Благодаря вашей проблеме проблема исправлена. :)

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

+0

это работает без 'my_so.data.foobar = null' проверить!? – www0z0k

+0

возможно, условный код выполняется до создания экземпляра? вы получаете ошибки во время выполнения? если да, то включение их в вопрос поможет диагностировать проблему. – JeremyFromEarth

+0

Теперь он работает. :) Если я правильно понимаю, я передавал undefined в myapp.myfoo, перезаписывая значение «нормального» значения по умолчанию, которое я определил ранее. – Sint

ответ

6

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

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

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

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

+0

Это великолепно работает! Я подозреваю, что проблема была именно такой, как вы сказали, свойство было неопределенным, но не null (моя ржавость с AS3 очевидна). Я приму это как ответ, если не будет лучшей идиомы. – Sint

3

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

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

Насколько я понимаю, основное отличие между этим и hasOwnProperty заключается в том, что IN проверяет свойства прототипа, но hasOwnProperty этого не делает. В моем случае это действительно не имеет значения, оба пути работают. – Sint

+0

Да, это разница в действии, и я/думаю/«в» немного быстрее, потому что он встроен в AVM. Но в основном я просто предпочитаю, как он читает :) – Sophistifunk

Смежные вопросы