ДействиеСценарий / Говнокод #13010 Ссылка на оригинал

0

  1. 1
  2. 2
if (view_clip.parent.contains(view_clip))
  view_clip.parent.removeChild(view_clip);

это надо было до такого додуматься

Запостил: slavara slavara, (Updated )

Комментарии (24) RSS

  • Для красоты нужно все обернуть в метод:
    remove_through_the_ass(view_clip)
    Ответить
  • removeChild - какой-то стандартый метод?
    а есть нечто типа view_clip.removeFromParent() ?
    Ответить
  • А условие чисто теоретически может оказаться false?
    Ответить
    • А вдруг за ту миллисекунду, что исполнялось выражение, параллельный поток успел его убить? Или отца лишили родительских прав...

      Стоп! Автор забыл предусмотреть возможную кончину родителя:
      if (view_clip.parent && view_clip.parent.contains(view_clip))
        view_clip.parent.removeChild(view_clip);
      Ответить
    • А разве у всех элементов есть родитель? Что там вернётся если самый верхний уровень? Расскажите, AS-ники.
      P.S. А, снизу уже рассказали.
      Ответить
  • removeChild - стандартный
    условие может выкинуть ексепшн(если парент null)
    условие может быть тру, но removeChild выкинет эксепшн
    view_clip.removeFromParent() - не айс подход, дети не должны решать за родителей
    Ответить
    • >дети не должны решать за родителей
      Так мы ничего за родителей и не решаем - просто говорим убить view_clip. Ребенок захотел - самоубился,поставив в известность родителя) Или у вас работает принцип Тараса Б - объекты могут удалять только их родителями?
      Ответить
      • я стараюсь придерживаться этого принципа, за исключением каких-то очень специфичных моментов.. и никогда не гадаю, куда у меня делся объект и почему, не паранойю проверками, с мыслью, а вдруг оно где-то почему-то удалилось уже..
        Ответить
      • Очень правильный принцип.
        Вложенный объект уведомляет вышестоящий, вышестоящий убирает ссылку на вложенный, в шарпе на этом можно остановится.
        Ответить
    • В перерыве между "Будем бить через дымоход!" и охотой на оленя. (Чёрт, охота на оленя... это уже ДеНиро какой-то, а не Мюнхгаузен.)
      Ответить
  • А вообще, чего вы ржёте. У Action Script известно откуда ноги растут. В javascript, это обычная практика: element.parentNode.removeChild(element)
    отличие только в том, что там не спрашивают родителя: "Аз есмь?"
    Ответить
  • contains проверяет то, что клип находится где-то в дисплей списке родителя. Но, как правило, ситуаций, когда один и тот же клип может быть либо в непосредственном списке детей, либо глубже по иерархии в реальной жизни не возникает. Так что код выше вполне себе тривиальный / ничего в нем такого нет.
    ЗЫ. Несмотря на неинтуитивную запись, поиск делается от ребенка к предполагаемому родителю, так что максимум, вместо проверки parent получим десяток проверок parent - не смертельно, а писанины меньше. При этом в большинстве случаев, самая же первая проверка parent либо найдет нужного родителя, либо обнаружит, что клип вообще не в списке отображения.
    Ответить
    • view_clip.parent.contains(view_clip) не может быть фолс. Но если это не базовые классы а свой велик...
      Ответить
      • Условие может оказаться false даже во встроенных классах, у стейтов SimpleButton например. Но это уже издержки производства. А так, да, восновном не может.
        Ответить
        • О господи, кто то юзает SimpleButton? Вообще наверно у меня не возникало желаний удалить что то таким образом, поэтому и не сталкивалась. Буду знать.
          Ответить
          • У маски и у hitarea вроде похожие проблемы были. А еще есть картинки в текстовых полях - я уже сейчас не вспомню, но там было много всяких неувязок в том смысле кто чей родитель и как так может быть, что ребенок думает, что у него есть родители, а родители о нем и не подозревают. Помнится, еще странно вели себя объекты спрятанные под clipping rectangle. Вобщем, если бы это было что-то общего назначения, то лишний раз убедиться не помешало бы.
            Ответить
  • напоминает мне об изврате с картинками в текстфилде. у картинки парент - текстфилд, в то же время текстфилд - не дисплейобжектконтейнер.
    Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8