我有一个对象,其中包含我想要绑定到表单元素的十几个字段,以便我可以使用该对象将数据发送回服务器进行保存.
我的容器对象的定义:
private static const emptyLink:Object = {
id: -1, title:'',
trigger1:'',trigger2:'',trigger3:'',trigger4:'',trigger5:'',
linkTitle:'', linkBody:'',
answer1:'',answer2:'',answer3:'',answer4:'',answer5:''
};
[Bindable] public var currentLink:Object = emptyLink;
Run Code Online (Sandbox Code Playgroud)
currentLink
在运行时分配给ArrayCollection中的特定索引,我只是使用该emptyLink
对象进行初始化.
<mx:Panel id="triggerPanel" title="Trigger" width="33%">
<mx:VBox id="tpBoxes" width="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
<mx:TextInput id="trigger1" width="100%" textAlign="left" text="{currentLink.trigger1}" />
<mx:TextInput id="trigger2" width="100%" textAlign="left" text="{currentLink.trigger2}" />
<mx:TextInput id="trigger3" width="100%" textAlign="left" text="{currentLink.trigger3}" />
<mx:TextInput id="trigger4" width="100%" textAlign="left" text="{currentLink.trigger4}" />
<mx:TextInput id="trigger5" width="100%" textAlign="left" text="{currentLink.trigger5}" />
</mx:VBox>
</mx:Panel>
Run Code Online (Sandbox Code Playgroud)
当然,这编译并显示得很好,但每个实例都有运行时警告:
警告:无法绑定到类'Object'上的属性'trigger1'(类不是IEventDispatcher)警告:无法绑定到类'Object'上的属性'trigger2'(类不是IEventDispatcher)警告:无法绑定到类'Object'上的属性'trigger3'(类不是IEventDispatcher)警告:无法绑定到类'Object'上的属性'trigger4'(类不是IEventDispatcher)警告:无法在类上绑定属性'trigger5' '对象'(类不是IEventDispatcher)
并且在更改字段currentLink
时不更新对象TextInput
.
显而易见的答案是我的对象需要是实现的类的实例IEventDispatcher
.答案没有告诉我的是实现该界面的细节(需要什么?什么不是?),以及是否有更简单的方法 …
是否可以在不使用MXML的情况下使用Flex Framework和组件?我非常了解ActionScript,并且不想乱用一些新的XML语言只是为了获得一些简单的UI.任何人都可以提供一个包含.as文件的例子,该文件可以编译(理想情况下通过FlashDevelop,虽然只是告诉如何使用Flex SDK也可以)并使用Flex Framework?例如,只显示弹出打开警报的Flex按钮将是完美的.
如果不可能,有人可以提供一个最小的MXML文件,它将引导一个自定义AS类,然后可以访问Flex SDK吗?
正如标题所示,"组件"(新建 - > MXML组件)和"模块"(新建 - > MXML模块)之间有什么区别?
谢谢,大卫
我想做的事情:创建一个包含一些子节点的MXML组件,然后通过MXML扩展它以创建一个包含更多子节点的新组件,而不会丢失原始集合.换一种说法
创建一个组件bc.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
<s:Button id="b1" label="button1"/>
</s:BorderContainer>
Run Code Online (Sandbox Code Playgroud)
然后将其扩展到单独的组件mc.mxml
<?xml version="1.0" encoding="utf-8"?>
<borderContainerX:bc xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:borderContainerX="borderContainerX.*">
<s:Button id="b2" y="100" label="button2"/>
</borderContainerX:bc>
Run Code Online (Sandbox Code Playgroud)
并获得一个带有2个按钮的组件.
我已经看到了这是怎么不同的线程要么不可能,(1)或变通办法来做到这一点(2,3)如果事情已经使用Flex 4的出现改变,或者如果我们仍然坚持这些一直想知道解决方案3线程中的最后一个回复似乎提示Flex 4修复它?
到目前为止,我只做了一些Flex开发,但我更喜欢以编程方式在mxml文件上创建控件的方法,因为(如果我错了,请纠正我!)我已经收集到你可以'它有两种方式 - 也就是说,在单独的ActionScript类文件中具有类功能,但是在mxml中声明了包含的元素.
生产力方面似乎没有太大差异,但以编程方式进行数据绑定似乎有点不那么简单.我看了一下mxml编译器如何转换数据绑定表达式.结果是一堆生成的回调和比mxml表示中更多的行.所以这里有一个问题:有没有办法以编程方式进行数据绑定,而不涉及受伤的世界?
如何将\ save文件放入应用程序目录?(adobe air)(请输入代码示例)
Flash和Flex之间的主要区别是什么?我有超过五年的flash经验,并且使用它和ActionScript3进行开发感觉很舒服.我发现自己对Flex越来越好奇,想知道什么时候最好使用flash或flex.还有,使用MXML可以完成的一切都可以用AS3完成吗?我对AS3和OOP有很深的理解,并且想知道在Flex中使用AS3和MXML之间的差异.
如果我正在创建输入字段MXML
,我可以将宽度设置为100%
.但我似乎无法在运行时通过ActionScript执行此操作.
这有效:
<mx:TextInput ... width="100%" />
Run Code Online (Sandbox Code Playgroud)
这不会编译,宽度是一个数字,而不是一个字符串:
var textinp:TextInput = new TextInput();
someContainer.addChild(textinp);
textinp.width = "100%"
Run Code Online (Sandbox Code Playgroud)
如何100%
在运行时通过ActionScript 设置组件的大小?
我有以下面板组件,名为AdvancedPanel with controlBarContent:
<!-- AdvancedPanel.mxml -->
<s:Panel>
<s:states>
<s:State name="normal" />
<s:State name="edit" />
</s:states>
<s:controlBarContent>
<s:Button
includeIn="edit"
label="Show in edit"
/>
<s:Button
label="Go to edit"
click="{currentState='edit'}"
/>
</s:controlBarContent>
</s:Panel>
Run Code Online (Sandbox Code Playgroud)
我创建了第二个面板,名为CustomAdvancedPanel,基于AdvancedPanel,因为我不想重新声明controlBarContent
<!-- CustomAdvancedPanel.mxml -->
<local:AdvancedPanel>
<s:Button includeIn="edit" label="Extra edit button" />
</local:AdvancedPanel>
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为CustomAdvancedPanel中的"edit"状态未根据编译器声明.我必须在CustomAdvancedPanel.mxml中重新声明编辑状态,如下所示:
<!-- CustomAdvancedPanel.mxml with edit state redeclared -->
<local:AdvancedPanel>
<local:states>
<s:State name="normal" />
<s:State name="edit" />
</local:states>
<s:Button includeIn="edit" label="Extra edit button" />
</local:AdvancedPanel>
Run Code Online (Sandbox Code Playgroud)
在应用程序组件中使用CustomAdvancedPanel会显示一个带有"Go to edit"按钮的空面板.但是当我单击它时,"额外编辑按钮"变为可见,但是控制栏内的"在编辑中显示"按钮则不可见.
当CustomAdvancedPanel为空,没有重新声明的状态和"额外编辑按钮"时,面板工作正常.
我认为这是因为在AdvancedPanel中声明的State对象与CustomAdvancedPanel不同,因此状态是不同的,即使它们具有相同的名称.然而.我不能在CustomAdvancedPanel中使用AdvancedPanel的状态而不用(重新)在mxml中声明它们.
有没有办法实现这种状态重用?或者有更好的方法来获得相同的结果吗?
我有一个可编辑的DataGrid,类似于:
<mx:Datagrid editable="true" dataProvider="{arrayListPreferences}" id="preferencesGrid">
<mx:columns>
<mx:DataGridColumn header="col1" dataField="preference" editable="false"/>
<mx:DataGridColumn header="col2" dataField="value" editable="true"/>
</mx:columns>
</mx:Datagrid>
Run Code Online (Sandbox Code Playgroud)
当用户编辑数据时,他点击了一个按钮,并调用一个将数据保存到数据库的功能,在此功能中,我必须在发送数据之前验证数据.我想使用简单的验证器(NumberValidator,StringValidator等),但我不知道如何将此验证器的源设置为第二列中的指定行.
mxml ×10
apache-flex ×9
flex4 ×3
flash ×2
air ×1
binding ×1
data-binding ×1
datagrid ×1
file ×1
filesystems ×1
flashdevelop ×1
flex3 ×1
states ×1