Flex开发人员应该记住哪些主要关键点是为了提高Flex应用程序的性能?我想到的是:
在开发Flex3/Flex4/AIR应用程序时,您尝试遵循哪些关键指导原则以提高其性能?
我需要在Web服务调用完成后调用FileReference.save(),但此方法有一个限制:"在Flash Player中,您只能成功调用此方法以响应用户事件(例如,在事件处理程序中)用于鼠标单击或按键事件.)否则,调用此方法会导致Flash Player抛出错误异常." (来自此处的文档)
这种限制有点模糊.这是否意味着我只能从事件处理函数中调用FileReference.save()方法,该函数被注册为某些类型的用户事件的侦听器?如果是,那么究竟哪些用户事件有效?(也许有一个事件永远不会被用户与我的应用程序交互调度,我可以为该事件类型注册一个事件处理函数,并从该函数中调用save()?)
我的困难是我无法安全地调用FileReference.save()方法,直到我的Web服务返回将用作FileReference.save()方法调用的参数的数据,因此触发FileReference的事件. save()调用实际上是一个ResultEvent,而不是一个用户事件,我很谨慎地调度一个新的(虚假)用户事件类型,以便能够触发FileReference.save()调用,除非它肯定是一个用户事件,永远不会因实际用户与我的应用程序交互而被调度.
简而言之,我现在正在做的是:我有一个注册为按钮点击的处理程序的函数.在此函数中,我进行Web服务调用以从服务器获取数据.我还有一个结果处理函数,它在Web服务调用完成时被调用,而在这里我想调用FileReference.save()方法,因为此时我知道数据已准备好保存到一份文件.但上述限制阻止我这样做 - 我收到一个错误:
Error #2176: Certain actions, such as those that display a pop-up window,
may only be invoked upon user interaction, for example by a mouse click
or button press.
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多东西来解决这个问题,比如创建一个带有FileReference.save()调用的第二个鼠标单击事件处理函数,并在超时间隔后调用它(以便让Web服务时间完成),但我保留了遇到同样的错误 - 也许这种方法不起作用,因为第二个函数没有注册为用作其参数的事件类型的事件监听器.
我是Flex开发的新手,所以也许我只是没有以正确的方式思考这个问题.如果有人可以提出另一种方法,我会非常感激.提前感谢您的意见或建议.
- 詹姆士
是否存在类似于Flex的替代ActionScript 3轻量级框架,但不是那么庞大.Flex是相当大的,SWF的重量不低于150Kb,我只是认为必须能够获得具有较小SWF文件的东西作为最终结果.
我来到AS Wing,很奇怪是否有更多.
感谢您提前回复!
在我的应用程序中,我使用的是Scroller组件.我似乎无法弄清楚应该设置一个监听器的事件,以便知道何时滚动内容.我尝试Event.CHANGE了Scroller.verticalScrollBar属性,但显然当用户使用鼠标滚轮或箭头键滚动时,事件不会触发.
我正在将应用程序从Flex 3迁移到Flex 4.在某些情况下,有一些弹出窗口的宽度和高度绑定到应用程序的宽度和高度.
width="{Application.application.width - 24}"
height="{Application.application.height - 32}"
Run Code Online (Sandbox Code Playgroud)
Application.application在4.0中已弃用.所以我用它取而代之
width="{FlexGlobals.topLevelApplication.width - 24}"
height="{FlexGlobals.topLevelApplication.height - 32}"
Run Code Online (Sandbox Code Playgroud)
现在,编译器发出警告,无法检测到topLevelApplication的数据绑定.
数据绑定将无法检测"topLevelApplication"的分配
我的问题是:是否有其他(可绑定)属性,我可以使用它来获得与以前相同的功能?
我可以将两个或更多actionscript类放在一个.as文件中,如下所示:
//A.as
package classes {
public class A {
public function A() {
var b:B = new B();
}
}
internal class B {
public function B() {
trace("Hello");
}
}
}
它在Flash Builder中不起作用:
在源路径中找到的文件不能具有多个外部可见定义.类:A; 类:乙
如果可能的话,我会问下一个问题.
我可以在一个.as文件中放置两个或多个包含多个类的包吗?
我将TabNavigator从Flex 3迁移到Flex 4.5时遇到了问题.剥离到最低限度,以下代码将产生错误,即TabNavigator的第二个子项无法正确创建:
<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
>
<fx:Script>
<![CDATA[
protected function over():void
{
trace('over');
}
protected function content_one_init():void
{
content_one.enabled = true;
navigator.selectedIndex = 1;
}
]]>
</fx:Script>
<mx:TabNavigator
id="navigator"
creationPolicy="auto"
width="100%" height="100%"
>
<mx:VBox
id="content_one"
enabled="false"
creationComplete="content_one_init()"
label="One"
mouseOver="over()"
/>
<mx:VBox label="Two">
<mx:Label text="Content Two" />
</mx:VBox>
</mx:TabNavigator>
</s:Application>
Run Code Online (Sandbox Code Playgroud)
我在启动时看到的是一个TabNavigator,它选择了第二个标签但没有内容而不是预期的"内容二"标签.该navigator.selectedIndex = 1;指令只是为了舒适,如果您在启动后用鼠标选择第二个选项卡,则也会出现错误.
现在来了有趣的部分:如果我执行以下任何操作,则会创建第二个子项:
creationPolicy="all"在content_one上设置(这是预期的),content_one.enabled = true,enabled="false"content_one,mouseOver="over()"从content_one中删除(这个真的很奇怪,因为从不调用处理程序)这真的是一个Flex bug,还是有什么我想念的?我使用的是Flex 4.5.0.20967,所有这些都在Flex 3.5中运行良好.
谢谢.
有人能够以一种易于理解的方式简要解释不同Flex尺寸属性的含义吗?
到目前为止我所拥有的:
真实大小
width和height.这是组件的实际(和最终)大小.如果未明确设置,则将通过应用所有布局规则和百分比大小来计算大小.
明确的大小
explicitWidth和explicitHeight.我们需要两个属性来决定是否需要计算实际大小,或者只是从这些属性中复制.
测量尺寸
measuredWidth,measuredHeight,measuredMinWidth和measuredMinHeight.组件的默认大小.该组件应该在其measure()钩子中设置这些大小.仅当未设置显式大小(例如width或explicitHeight)时,默认大小才适用.仅在百分比大小的情况下考虑最小/最大测量尺寸.计算的(实际)尺寸不能小于测量的最小尺寸.
百分比大小
percentWidth和percentHeight.明显.
最小尺寸
minWidth,minHeight.返回组件的最小大小 - 显式设置或者设置默认的最小大小measure().允许设置显式最小值,以覆盖默认(测量)最小值.
明确的最小尺寸
explicitMinWidth,explicitMinHeight.与显式大小相同的角色.如果设置,则使用这些值,否则使用默认(测量的)最小值.
最大尺寸
maxWidth,maxHeight.返回组件的最大大小 - 显式设置或默认最大大小10000.
显式最大尺寸
explicitMaxWidth,explicitMaxHeight.与显式大小或显式最小大小相同的角色.如果设置,这些值将用于确定上部大小边框,否则用于默认最大大小10000.
希望,还有更多尺寸属性需要讨论.
我正在为一个项目使用新的Spark Datagrid,但我必须承认滚动条让我烦恼一点,所以我想对它有一些控制权.
换句话说,我想以编程方式将Datagrid滚动条位置设置为我想要的位置.
先感谢您.
我有2个皮肤,几乎相同,但在1个小方法上有所不同,如果我可以将布尔值传递给皮肤,同时将其分配给主机组件(按钮).
<s:Button skinClass="MyBtnSkin" />
Run Code Online (Sandbox Code Playgroud)
在为按钮分配皮肤时是否有办法,我还可以以某种方式将参数传递给皮肤?
flex4 ×10
apache-flex ×9
actionscript ×3
adobe ×2
flex3 ×2
air ×1
class ×1
datagrid ×1
flex4.5 ×1
oop ×1
packages ×1
performance ×1
scroll ×1
scrollbar ×1
tabnavigator ×1