Ошибка # 1069: свойство не найдено и нет значения по умолчанию

#apache-flex #flash-builder

#apache-flex #flash-builder

Вопрос:

у меня возникла проблема с проектом, над которым я работаю во Flash Builder. Ниже приведен мой стек и пример кода. Может кто-нибудь, пожалуйста, сказать мне, что я делаю не так?

Спасибо, что уделили мне время.

— Stack —

Ошибка ссылки: Ошибка # 1069: Свойство page4 не найдено на WOAPPv2 и нет значения по умолчанию. в WOAPPv2/dragDropHandler()[/Users/martinw/Documents/Adobe Flash Builder 4/WOAPPv2/src/WOAPPv2.mxml:165] во flash.events::EventDispatcher/dispatchEventFunction() во flash.events ::EventDispatcher/dispatcheventfunction() во flash.events::EventDispatcher/dispatchEvent() в mx.core::UIComponent/dispatchEvent()[E:dev4.xframeworksprojectsframeworksrcmxcoreUIComponent.as:12528 ] в mx.managers.dragClasses::DragProxy/_dispatchDragEvent()[E:dev4.xframeworksprojectsframeworksrcmxmanagersdragClassesDragProxy.as:374 ] в mx.managers.dragClasses::DragProxy/mouseUpHandler()[E:dev4.xframeworksprojectsframeworksrcmxmanagersdragClassesDragProxy.as:599]

—Пример кода — Это то, что работает

 import mx.core.DragSource;
import mx.events.DragEvent;
import mx.managers.DragManager;

        private function initiateDrag(event:MouseEvent,value:String):void{

            var dragInitiator:Image= event.currentTarget as Image;   

            var dragSource:DragSource = new DragSource();
            dragSource.addData(value, 'value');
            DragManager.doDrag(dragInitiator, dragSource, event);
        } 

        private function dragEnterHandler(event:DragEvent):void {
            var dropTarget:VBox =event.currentTarget as VBox;
            if (event.dragSource.hasFormat('value')) {
                DragManager.acceptDragDrop(dropTarget);
            }
        }

private function dragDropHandler(event:DragEvent):void {
            var pageName:String = event.currentTarget.name as String;
            var value:String = event.dragSource.dataForFormat('value') as String;
            this[pageName].source = "assets/big/" value; 


        }
  

 <s>

<s:HGroup id="hGr"
              requestedColumnCount="2"
              variableColumnWidth="false"
              columnWidth="475"
              height="450"
              gap="100"
              clipAndEnableScrolling="true" paddingLeft="10" paddingRight="10">


        <mx:VBox name="page1"
                 backgroundColor="#EFEFF0"
                 verticalScrollPolicy="off" 
                 horizontalScrollPolicy="off"
                 horizontalAlign="center" verticalAlign="middle"
                 dragEnter="dragEnterHandler(event)"
                 dragDrop="dragDropHandler(event)"
                 width="475"
                 x="0">


            <mx:Image id="page1" showBusyCursor="true" width="713" height="692" scaleContent="true" maintainAspectRatio="true" minWidth="713" minHeight="692" scaleX="1" scaleY="1" horizontalAlign="center" verticalAlign="top"/>
        </mx:VBox>


    </s:HGroup>
  

Это прерывается, если я делаю это таким образом, создавая контейнеры и изображения во время выполнения

 <script>


   private function initVars():void {
            createSpreads();
        }


        public function createSpreads():void {

            var s:VBox = new VBox();
            s.name ="page4";

            s.setStyle("backgroundColor","#fe0000"); 
            s.verticalScrollPolicy="off";
            s.horizontalScrollPolicy="off";
            s.setStyle("horizontalAlign","center");
            s.setStyle("verticalAlign","middle");
            s.addEventListener(DragEvent.DRAG_ENTER, dragEnterHandler);
            s.addEventListener(DragEvent.DRAG_DROP, dragDropHandler);
            s.width= 475;
            s.setStyle("x","0");
            hGr.addElement(s);

            hGrCol4.text = "Vboxname: " s.name "VboxID: " s.id;

            var page3:Image = new Image();
            page3.id ="page4";

            page3.showBusyCursor = true;
            page3.width = 713;
            page3.height = 692
            page3.scaleContent = true;
            page3.maintainAspectRatio = true;
            page3.minWidth = 713;
            page3.minHeight = 692;
            page3.scaleX = 1;
            page3.scaleY = 1;
            page3.source = "assets/big/IMG_7112.jpg";
            page3.setStyle("backgroundColor","#ffffff");
            page3.setStyle("horizontalAlign","center");
            page3.setStyle("verticalAlign","top");
            s.addElement(page3);

            hGrCol3.text = "Imagename: " page3.name "ImageID: " page3.id;
        }


import mx.core.DragSource;
import mx.events.DragEvent;
import mx.managers.DragManager;

        private function initiateDrag(event:MouseEvent,value:String):void{

            var dragInitiator:Image= event.currentTarget as Image;   

            var dragSource:DragSource = new DragSource();
            dragSource.addData(value, 'value');
            DragManager.doDrag(dragInitiator, dragSource, event);
        } 

        private function dragEnterHandler(event:DragEvent):void {
            var dropTarget:VBox =event.currentTarget as VBox;
            if (event.dragSource.hasFormat('value')) {
                DragManager.acceptDragDrop(dropTarget);
            }
        }

private function dragDropHandler(event:DragEvent):void {
            var pageName:String = event.currentTarget.name as String;
            var value:String = event.dragSource.dataForFormat('value') as String;
            this[pageName].source = "assets/big/" value; 

        }


</script>

<s>

<s:HGroup id="hGr"
              requestedColumnCount="2"
              variableColumnWidth="false"
              columnWidth="475"
              height="450"
              gap="100"
              clipAndEnableScrolling="true" paddingLeft="10" paddingRight="10">

    </s:HGroup>

</s>
  

Выше без контейнеров в HGroup возвращает ‘свойство page4 не найдено в WOAPPv2 и нет значения по умолчанию’ — мой конечный результат должен быть таким

страница 4.источник = «assets/big/imagename.jpg «;

Я в тупике. Я переосмысливаю это и могу просто создать vboxes, а затем установить триггер для создания изображения и заполнения в samedragDropHandler. Мысли?

Ниже приведено решение — еще раз спасибо alxx. Теперь мне нужно начать делиться своими знаниями с другими людьми здесь.

 public function dragDropHandler(event:DragEvent):void {

        // Retrieve the Image Name from Drop
        var value:String = event.dragSource.dataForFormat('value') as String;

                    //
        event.currentTarget.getChildAt(0).source = "assets/big/" value;

        }
  

Комментарии:

1. Чувак, я не могу найти 165-ю строку в твоем коде! Где это? Кстати, у FB есть отличный отладчик, вы должны им воспользоваться.

2. ХОРОШО, оно должно быть this[pageName] . У вашего приложения нет свойства pageName (var pageName не учитывается — свойство будет просматриваться по значению pageName.)

3. -1. Вы не можете просто вставить весь свой код и ожидать, что мы отладим его за вас.

4. Приносим извинения. Это первая публикация на доске вопросов и ответов. Я провел свое исследование и не могу понять это. В следующий раз я опубликую только код, в котором ошибка. alxx — спасибо за ваше время. Я попытался создать свойства на основе примеров Adobe. Не могли бы вы, пожалуйста, поделиться ссылкой или пониманием того, как создать свойство для этого? Моей целью было добавить элемент vbox и дочерний элемент image, который разделял имя с идентификатором, и использовать событие для захвата имени currenttarget, являющегося элементом управления изображением — это[pageName] возвращает правильную строку — page4, но вылетает. Должен ли я указывать свойство в объявлениях?

Ответ №1:

… продолжая здесь для правильного форматирования
проблемной строки:

 var value:String = event.dragSource.dataForFormat('value') as String;
this[pageName].source = "assets/big/" value;
  

Моей целью было добавить элемент в vbox и
дочерний образ, который совместно использовал имя с
идентификатор и используйте событие для захвата
имя currenttarget является изображением
управление

Не уверен, правильно ли я это понимаю. Если event.currentTarget — это изображение, которое вам нужно, вы можете просто преобразовать его в Image. Или вам нужно где-то найти другое изображение (сгенерированное в Repeater)?

Обновить

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

Имена DisplayObjects — это только метки, а не ссылки. Если вы думаете, что можете перемещаться по иерархии объектов с именами, подобными именам в JS DOM, то нет, во Flash это делается другим способом. Вы можете получить ссылку на VBox с помощью event.currentTarget — это более полезно, чем его имя (строка). Вы можете получить изображение внутри него с помощью getChildAt.

Комментарии:

1. event.currentTarget.name возвращает имя Vbox в виде строки и заполняет переменную pageName. Я пытаюсь использовать имя VBox в качестве строки для точечной записи для ссылки на изображение внутри него, которое имеет идентификатор с тем же именем. Это работает, если я создаю контейнеры вручную, но завершается неудачей, если я пытаюсь использовать addElement во время выполнения. Надеюсь, я правильно это объясняю. Я изменю свой код, чтобы показать вам, когда это работает, а когда нет. Еще раз спасибо за ваше время и терпение.

2. Отлично. Теперь это имеет смысл. Спасибо, что прояснили это. Прошлой ночью я потратил около 4 часов на его переработку и нашел решение. Это не так чисто, как нужно. По сути, я создавал новый дочерний элемент и предоставлял ему источник изображения, а затем удалял последнего дочернего элемента. Не очень практично с точки зрения памяти. Я обновил свой приведенный выше код, чтобы отразить решение. Человек… -2 ? Я исследовал и кодировал свой @ $ $ off — я предполагаю, что переход с flash MX и PHP на flex не одобряется. Спасибо alxx — 1 за вас, сэр.

3. Людям просто не нравятся запутанные вопросы с большим количеством кода… Не сдавайтесь, они в любом случае могут быть очень полезны 🙂