Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   if (contains), а как сделать if (do not contain)?? (http://www.flasher.ru/forum/showthread.php?t=205447)

nelco 05.12.2013 03:11

if (contains), а как сделать if (do not contain)??
 
добрый вечер! необходимо создать условие, противоположное if(contains), т.е. типа if(not contain)... я только начинаю изучать actionScript, подскажите правильный синтаксис, как это записать?

illuzor 05.12.2013 03:14

По сути, ваше выражение такое:
Код AS3:

if(contains == true)

Вам нужно так:
Код AS3:

if(contains == false)

Но можно записать кратко:
Код AS3:

if(!contains)


nelco 05.12.2013 03:17

я пробовал if(!contains) - не работало почему-то

Добавлено через 1 минуту
Код AS3:

private function downloadTorFn(e:MouseEvent):void 
                {
                        var sendWindowCont:SendWindowCont = new SendWindowCont();
 
                        if (contains(sendWindowCont)) removeChild(sendWindowCont);
                        if (!contains(sendWindowCont)) addChild(sendWindowCont);
 
 
 
                }

Добавлено через 2 минуты
в таком случае без остановки делается addChild

Добавлено через 9 минут
вынес
Код AS3:

var sendWindowCont:SendWindowCont = new SendWindowCont();

в поле класса, теперь получается, что условие
Код AS3:

if (contains(sendWindowCont)) removeChild(sendWindowCont);

не работает

Isfet 05.12.2013 04:47

Цитата:

Сообщение от nelco (Сообщение 1154298)
Код AS3:

private function downloadTorFn(e:MouseEvent):void 
                {
                        var sendWindowCont:SendWindowCont = new SendWindowCont();
 
                        if (contains(sendWindowCont)) removeChild(sendWindowCont);
                        if (!contains(sendWindowCont)) addChild(sendWindowCont);
 
 
 
                }


в таком случае без остановки делается addChild

это и логично, вы создаете объект и никуда его не добавляете, соответственно его нет в дисплей листе данного класса, вообще не понял смысл этой операции: проверять то, что и так известно.


наверное вы имели ввиду что-то вроде

Код AS3:

private function downloadTorFn(e:MouseEvent):void 
                {
                        var sendWindowCont:SendWindowCont = e.target as SendWindowCont;
 
                        if (contains(sendWindowCont)) removeChild(sendWindowCont);
                        if (!contains(sendWindowCont)) addChild(sendWindowCont);
 
 
 
                }


caseyryan 05.12.2013 10:54

Почитайте в документации описание метода contains, и поймете, что даже если объект добавлен в дочерний контейнер проверяемого контейнера, то contains() все равно вернет true. Лучше не использовать этот метод.
Я бы лучше сделал так:
Код AS3:

if (sendWindowCont.parent && sendWindowCont.parent == this) removeChild(sendWindowCont);

ну или добавил в класс метод для проверки
Код AS3:

override public function get contains(value:DisplayObject):Boolean {
  return value.parent && value.parent == this;
}

И потом бы вызывал этот contains() вместо нативного

п.с. Может с сигнатурой метода ошибся, писал прямо здесь, точно не помню

maxkar 05.12.2013 12:25

Цитата:

Сообщение от nelco (Сообщение 1154298)
вынес
Код AS3:

var sendWindowCont:SendWindowCont = new SendWindowCont();

в поле класса, теперь получается, что условие
Код AS3:

if (contains(sendWindowCont)) removeChild(sendWindowCont);

не работает

А как вы определили, что не работает то? Отладчиком прошли? Да и какая разница, если в следующей строке вы его обратно добавляете?

Psycho Tiger 05.12.2013 12:35

Код AS3:

private var sendWindowCont:SendWindowCont = new SendWindowCont(); //class field
 
if (contains(sendWindowCont)) removeChild(sendWindowCont);
else addChild(sendWindowCont);
// или в одну строчку:
contains(sendWindowCont) ? removeChild(sendWindowCont) : addChild(sendWindowCont);


etc 05.12.2013 12:42

За вариант с одной строчкой надо руки по пояс отрывать.

Psycho Tiger 05.12.2013 13:18

Цитата:

Сообщение от etc (Сообщение 1154318)
За вариант с одной строчкой надо руки по пояс отрывать.

Он занимает вдвое меньше места, читается вдвое проще, быстрее и выглядит натуральней.
Как тебе такой вариант?
Код AS3:

((contains(sendWindowCont) && removeChild(sendWindowCont)) is Boolean) && addChild(sendWindowCont);


etc 05.12.2013 13:22

Цитата:

Сообщение от Psycho Tiger (Сообщение 1154320)
Он занимает вдвое меньше места, читается вдвое проще, быстрее и выглядит натуральней.

Читается не проще совершенно.


Часовой пояс GMT +4, время: 11:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.