【问题标题】:Error #1069: Property not found on and there is no default value错误 #1069:找不到属性并且没有默认值
【发布时间】:2011-05-17 05:02:32
【问题描述】:

我在 Flash Builder 中处理的项目存在问题。 以下是我的堆栈和代码示例。有人可以告诉我我做错了什么吗?

感谢您的宝贵时间。

-- 堆栈--

ReferenceError:错误 #1069:在 WOAPPv2 上找不到属性 page4,并且没有默认值。 在 WOAPPv2/dragDropHandler()[/Users/martinw/Documents/Adobe Flash Builder 4/WOAPPv2/src/WOAPPv2.mxml:165] 在 flash.events::EventDispatcher/dispatchEventFunction() 在 flash.events::EventDispatcher/dispatchEvent() 在 mx.core::UIComponent/dispatchEvent()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:12528] 在 mx.managers.dragClasses::DragProxy/_dispatchDragEvent()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\dragClasses\DragProxy.as:374] 在 mx.managers.dragClasses::DragProxy/mouseUpHandler()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\dragClasses\DragProxy.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 中的容器返回'在 WOAPPv2 上找不到属性 page4 并且没有默认值' - 我的最终结果应该是这个

page4.source = "assets/big/imagename.jpg";

我被难住了。我重新考虑它,可能只是创建 vbox,然后设置触发器来创建图像并填充到 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;

        }

【问题讨论】:

  • 老兄,我在你的代码中找不到第 165 行!它在哪里?顺便说一句,FB 有很好的调试器,你应该使用它。
  • 好的,一定是this[pageName]。您的应用没有 pageName 属性(var pageName 不计算在内 - 属性将通过 pageName 的值来查找。)
  • -1。您不能只是粘贴所有代码并期望我们为您调试它。
  • 道歉。这是第一次在问答板上发帖。我做了我的研究,无法弄清楚。下次我将只发布有问题的代码。 alxx - 感谢您的宝贵时间。我尝试根据 adobe 的示例创建属性。您能否分享有关如何为此创建属性的链接或见解?我的目标是添加一个与 id 共享名称的 vbox 和图像子元素,并使用该事件来获取作为图像控件的当前目标名称 - this[pageName] 返回正确的字符串 - page4 但会爆炸。我应该把属性放在声明中吗?

标签: apache-flex flash-builder


【解决方案1】:

...继续此处进行正确格式化
问题线:

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

我的目标是添加元素一个 vbox 和 与共享名称的图像孩子 一个 id 并使用事件来获取 当前目标名称是图像 控制

不确定我是否理解正确。如果 event.currentTarget 是您需要的 Image,您可以将其转换为 Image。或者您需要在某处找到另一个图像(在中继器中生成的图像)​​?

更新

“我正在尝试使用 VBox 的名称作为字符串,用于点表示法来引用其中的图像”

DisplayObjects 的名称只是标签,而不是参考。如果您认为您可以使用 JS DOM 中的名称遍历对象层次结构,那么不,它在 Flash 中以其他方式完成。您可以使用event.currentTarget 获得对VBox 的reference - 它的名称(字符串)更有用。您可以使用 getChildAt 获取其中的 Image。

【讨论】:

  • event.currentTarget.name 将 Vbox 的名称作为字符串返回并填充 pageName 变量。我正在尝试使用 VBox 的名称作为用于点符号的字符串来引用其中具有相同名称的 Id 的图像。如果我手动创建容器,它可以工作 - 但如果我尝试在运行时使用 AddElement 则会失败。我希望我解释得对。我将修改我的代码以向您展示它何时有效,何时无效。再次感谢您的时间和耐心。
  • 优秀。现在这是有道理的。谢谢你澄清这一点。昨晚我花了大约 4 个小时来修改它并找到了解决方案。它不像正确的方式那样干净。我基本上是在创建一个新孩子并给它一个图像源,然后删除最后一个孩子。不是很实用的记忆。我已经更新了上面的代码以反映解决方案。男人... -2 ?我一直在研究和编码我的@$$ off - 我想来自 flash MX 和 PHP 的背景到 flex 是不受欢迎的。谢谢 alxx - 为你 +1 先生。
  • 人们只是不喜欢用大量代码混淆问题...不要放弃,无论如何它们都会很有帮助:)
猜你喜欢
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多