现在我必须在这里遗漏一些东西,因为这似乎是一个非常基本的问题,可以在任何"Flex图表入门"教程中解决.但是,我能找到的所有内容都暗示图表应该在dataProvider更改时自动更新.请注意,提示.
这是我的标记:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="econemon Sensor Simulator">
<!-- ... -->
<mx:Script source="SimulatorFunctions.as" />
<mx:HDividedBox left="0" top="0" bottom="0" right="0">
<!-- ... -->
<mx:VDividedBox width="75%" height="100%">
<mx:PlotChart width="100%" height="33%" dataProvider="{xmlDataTest}">
<mx:horizontalAxis>
<mx:DateTimeAxis dataUnits="seconds" displayLocalTime="true" parseFunction="dtFromUnixtime"/>
</mx:horizontalAxis>
<mx:series>
<mx:LineSeries xField="dt" yField="fltValue" displayName="Testkurve" />
</mx:series>
</mx:PlotChart>
<mx:Panel width="100%" height="66%">
<mx:Button label="Start" click="vDataStart()" />
<mx:Button label="Stop" click="vDataStop()" />
</mx:Panel>
</mx:VDividedBox>
</mx:HDividedBox>
</mx:WindowedApplication>
Run Code Online (Sandbox Code Playgroud)
这是我的ActionScript的一部分:
[Bindable]
public var xmlDataTest:Array = [
{ dt: "1230908694", fltValue: "50.4" },
// ...
{ dt: "1230909594", fltValue: …Run Code Online (Sandbox Code Playgroud) 我有几个类想要相互传递一些信息,然后使用该信息(回调模式)稍后回调.
在我的应用程序中,此机制有两个目的:
我的对象基本上互相说"当你完成X时,给我回电话并告诉我用Z做Y(因为到那时我会忘记它)".X可能只是在等待正确的时间,但也与远程服务通信或调用本地功能.
现在,在Java中有函数指针(或等效函数),我会实现一些包含一个"Job"的类以及它需要的参数.例如,在PHP中,此结构必须存储类名,函数名和参数数组.在C中,它将是一个指向函数的指针,我必须使参数的数量和类型与所有调用相同.
在Java中,通常的方法是拥有一个由所有想要被回调的类实现的接口,如下所示:
public interface ICallable {
public void call_me(Object data);
}
Run Code Online (Sandbox Code Playgroud)
现在这对我不起作用,因为
也许我的问题是我正在尝试为各种回调设置一个通用的数据结构和调用程序,但原则上它似乎对我有意义.
在Java中处理这种情况有什么好的设计模式?
我正在寻找相似的Python装饰器/ Lisp宏/ Java注释(是的,我知道这些不一定等同于它们)在Actionscript中.提供类似功能的工具也很棒(我在Linux上使用Eclipse的Flex Builder插件).
我正在编写Flex应用程序,这就是我想要完成的任务:
我在不同的类中封装了各种远程功能集(有时称为"消息传递网关"或"远程代理"),其中每个方法都镜像服务器上的方法,如下所示:
class UserManagementService extends MyHttpService {
//...
private final _urlBase:String = "http://example.com/services/users"
//...
public function usrGet(ix:int):User
{
url = urlBase + "/get";
mp:Dictionary = new Dictionary();
mp["ix"] = ix;
result:User = this._service.varSend(url, this.sEncodeParams(mp), Class("User"));
return result;
}
//...
}
Run Code Online (Sandbox Code Playgroud)
因为我已经在函数声明中有了远程函数的参数和返回类型,所以只需添加URL后缀就好了,就像这样(Python启发的伪代码):
@remotify("/get")
public function usrGet(ix:int):User { }
Run Code Online (Sandbox Code Playgroud)
现在,这不是很整洁吗?;-)
这可能有点主观,但我经常发现,看看其他开发者如何处理某些日常细节会非常有趣.
我有这样的代码:
class A {
public List<SomeType> getOneSet() { ... }
public List<SomeType> getAnotherSet() { ... }
}
class B {
public static OtherType convert(SomeType input) { ... }
}
// ...
A a = new A();
List<OtherType> rgResults = new ArrayList<OtherType>();
Run Code Online (Sandbox Code Playgroud)
现在将遵循相当于两个相同的for循环,如下所示:
for (SomeType input : a.getOneSet()) {
rgResults.add(B.convert(input);
}
for (SomeType input : a.getAnotherSet()) {
rgResults.add(B.convert(input);
}
Run Code Online (Sandbox Code Playgroud)
这有效,但它当然是代码重复.如果循环中的代码变得稍微复杂或者有两个以上的集合,那么这是不可接受的.
因此,我将循环放在一个以源和目标列表作为参数的函数中,但很想知道是否还有其他方法.特别是那些在你从不在多个地方调用函数时可能更合适的东西.
例如,我会喜欢以下,但由于我不能使用泛型数组,因此无效:
for (List<SomeType> rgSrc : new List<SomeType>[] { a.getOneSet(), a.getAnotherSet() } ) {
for (SomeType src : …Run Code Online (Sandbox Code Playgroud)