2012-05-31 46 views
0

我试图找出了正确的方法使用Flash Builder在移动应用“代码背后”代码:Flash Builder的4.6 - 背后的办法

  1. 我创建Flex移动AIR项目(基于在“标签视图”模板)
  2. 设置我的UI设计模式
  3. 现在我希望所有的逻辑是在一个单独的类,这将改变UI外观相应

听起来很容易,但是我不能真正得到这种方法做这件事,任何帮助表示赞赏:)

更新:

主要应用:

<?xml version="1.0" encoding="utf-8"?> 
<s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160"> 
    <s:ViewNavigator label="a" width="100%" height="100%" firstView="views.aView"/> 
    <s:ViewNavigator label="b" width="100%" height="100%" firstView="views.bView"/> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
</s:TabbedViewNavigatorApplication> 

视图答:

<?xml version="1.0" encoding="utf-8"?> 
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" title="a"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <s:Label id="txt" x="280" y="139" text="Label"/> 
</s:View> 

所以现在我想MyClass的改变TXT textField根据我的逻辑,什么是正确的方法?

+0

我知道你想分开你的AS3代码和MXML代码,是否正确?您将无法使用设计模式进行此操作。 – JeffryHouser

+0

我想你可能会对使用代码背后感到困惑......或者我对你想要做的两件事情感到困惑:)。通常情况下,您会将数据传递到视图中,并且可以将视图设置为适当地响应分配给它的数据。这不需要代码。如果你想在每个视图之间共享逻辑,你可以为这两个视图创建一个通用的基类(在某种意义上“代码隐藏”),你也可以在一个单独的“工具”类上使用静态方法。有许多可能的方法。 – shaunhusain

回答

0

一个优雅的方式是实现IMXMLObject。当实现这个接口时,IMXMLObject#initialize方法将把组件(命名为Object类型的文档)和一个可选的id(类型为String)作为参数,并且你可以很容易地实现这个模式。最大的好处是,你用的组合物在继承和使用接口时,你可以用它作为某种类型的保存混合式的浏览方式:

package net.icodeapp.examples.views 
    { 
     import flash.events.MouseEvent; 

     import mx.core.IMXMLObject; 
     import mx.events.FlexEvent; 

     public class ViewBaseModel implements IMXMLObject 
     { 
     //------------------------------------------------------------------------- 
     // 
     //   Properties 
     // 
     //------------------------------------------------------------------------- 

     private var _id:String; 

     private var _viewBase:ViewBase; 

     protected function set viewBase(value:ViewBase):void 
     { 
      _viewBase = value; 

      if (!_viewBase) 
      throw new ArgumentError('View must be instance of ViewBase'); 

      if (!_viewBase.initialized) 
      _viewBase.addEventListener(FlexEvent.CREATION_COMPLETE, viewBase_creationCompleteHandler, false, 0, true); 
      else 
      viewCreationCompleted(); 
     } 

     //------------------------------------------------------------------------- 
     // 
     //   Constructor 
     // 
     //------------------------------------------------------------------------- 

     public function ViewBaseModel() 
     { 
     } 

     //------------------------------------------------------------------------- 
     // 
     //   Methods 
     // 
     //------------------------------------------------------------------------- 

     public function initialized(document:Object, id:String):void 
     { 
      viewBase = document as ViewBase; 
      _id = id; 
     } 

     private function viewCreationCompleted():void 
     { 
      _viewBase.addEventListener(MouseEvent.CLICK, viewBase_clickHandler); 
     } 

     //------------------------------------------------------------------------- 
     // 
     //   Event Handler 
     // 
     //------------------------------------------------------------------------- 

     private function viewBase_creationCompleteHandler(event:FlexEvent):void 
     { 
      viewCreationCompleted(); 
     } 

     private function viewBase_clickHandler(event:MouseEvent):void 
     { 
      // todo: do some action 
     } 
     } 
    } 

模型进行初始化和引用进行设置框架。当您看到生成的ActionScript代码时,您会看到,在模型实例化后,IMXMLObject#初始化它在构造函数中调用。

<?xml version="1.0"?> 
    <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:views="net.icodeapp.examples.views.*"> 
     <fx:Declarations> 
     <views:ViewBaseModel/> 
     </fx:Declarations> 
    </s:Group> 

该模型将按事件接收视图,并可以调用它的方法。

0

你所要做的就是创建一个AS文件,该文件具有与最初设置的MXML对象相同的基类,例如,如果它是VGroup make MyBaseClass extends VGroup,然后将VGroup更改为MyBaseClass。

[Main.mxml]

<main:MainBase 
    xmlns:main="*" 
    ...> 
</main:MainBase> 

[MainBase.as]

public class MainBase extends Application 
+0

另外,我建议不要使用设计模式,将粗糙的东西扔在一起很好,但如果你不了解底层布局,就很难在设计模式下做所有事情并使其适当地缩放,这就是除非你不关心缩放。 – shaunhusain

+0

感谢您的回复,但这是否意味着我将不得不在我的MainBase中声明所有MXML元素以获得参考? –

+1

是的,我不是这种方法的最大粉丝,但它确实有效。 – shaunhusain

0

代码的思考背后作为基类(或Abstract Class)。在抽象类中,实际实现方法或属性后面的“真实对象”留给扩展类提供是非常普遍的。

这与您在Flash中将基类设置为您的自定义类时所做的完全相同,但实际成员对象(按钮等)在其库实例链接到您的影片剪辑的舞台上提供夹。

欲了解更多关于代码的信息,请查看我的blog post here.如果您想查看此处描述的模板组件的代码,请拨打look here。尽管模板组件在Spark世界(IMO)中用处不大。

+0

感谢您的信息,我会看看:-) –