我正在尝试使用Flash Builder为移动应用找出“Code behind”的正确方法:
听起来很简单,但是我无法真正做到这一点,任何帮助都表示赞赏:)
更新
主要应用:
<?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>
查看A:
<?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 :(得分:0)
您所做的只是创建一个与最初设置的MXML对象具有相同基类的AS文件,例如,如果它是VGroup,则使MyBaseClass扩展VGroup,然后将VGroup更改为MyBaseClass。
实施例
[Main.mxml]
<main:MainBase
xmlns:main="*"
...>
</main:MainBase>
[MainBase.as]
public class MainBase extends Application
答案 1 :(得分:0)
将您的Code Behind视为基类(或Abstract Class)。在抽象类中,方法的实际实现或属性后面的“真实对象”通常留给扩展类来提供。
这与将Flash中的基类设置为自定义类时的操作完全相同,但实际的成员对象(按钮等)在MovieClip的舞台上提供,其库实例链接到剪辑
有关代码隐藏的更多信息,请查看我的blog post here.如果您要查看其中描述的模板组件的代码look here。虽然模板组件在Spark世界(IMO)中不太有用。
答案 2 :(得分: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>
模型将通过视图接收事件并可以调用其上的方法。