我有一个TitleWindow
组件。它允许我保存通过 3 提供的一些数据TextInput
。
该数据“填充”了DropDownList
另一个组件 TitleWindow
中的 a,而不是原始组件中的数据。
如何调用remoteObject
填充(或刷新)我的方法DropDownList
?
任何想法将不胜感激!
我有一个TitleWindow
组件。它允许我保存通过 3 提供的一些数据TextInput
。
该数据“填充”了DropDownList
另一个组件 TitleWindow
中的 a,而不是原始组件中的数据。
如何调用remoteObject
填充(或刷新)我的方法DropDownList
?
任何想法将不胜感激!
如果您愿意,您可以简单地使用 Singleton 作为模型,这将允许您共享数据,但请注意仅将需要共享的数据保留在此处,否则它将成为全球噩梦。
使用单例意味着您将拥有一个只能拥有一个实例的类。如果您在任何时候引用它时都将属性放在该类中,那么它将在整个应用程序执行过程中使用相同的内存。
http://blog.pixelbreaker.com/actionscript-3-0/as30-better-singletons
将单例类或单个属性标记为 Bindable 将使您可以观察更改并调用函数。
http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_8.html
把它放在一起你有这样的东西:
[单身人士.as]
package
{
[Bindable]
public class Singleton
{
public var myListData:Array;
public static var instance:Singleton;
public static function getInstance():Singleton
{
if( instance == null ) instance = new Singleton( new SingletonEnforcer() );
return instance;
}
public function Singleton( pvt:SingletonEnforcer )
{
// init class
}
}
}
internal class SingletonEnforcer{}
您想在其他地方处理此问题
[MyTitleWindow.as]
var instance:Singleton = Singleton.getInstance();
instance.myListData = [1,2,3];
[MyTitleWindowWithAList]
var instance:Singleton = Singleton.getInstance();
BindingUtils.bindSetter(funcUpdateList, instance, "myListData");
private function funcUpdateList(data:Object)
{
myList.dataProvider = data as Array;
}
另一种选择是创建一个携带数据有效负载的事件,从第一个标题窗口调度该事件并捕获它,问题是您必须在 PopUpManager 或 SystemManager 上注册侦听器,我相信因为 TitleWindow 不是我相信应用程序的直接子代。
单例是一个坏主意,你不应该养成使用它们的习惯。相反,只需从视图中调度一个事件,并从其他可以访问您的服务对象的东西中捕获它。
请注意,您的服务不应成为任何视图的一部分——视图的职责是显示数据并捕获用户更改数据的请求,而不是与服务器通信。
有关使用此模式编写的应用程序示例,请查看
请注意,这些是针对一些流行的框架编写的,但它们的编写方式使您可以轻松地用其他东西替换该框架代码,甚至是您自己的代码。
作为参考,这里是简单的实现,服务层在视图中直接被调用。您不能在不更改视图的情况下调用不同的服务,尽管使用静态服务意味着您可以从其他地方使用它。
这种静态用法在后面的示例中仍然存在,尽管今天我永远不会根据全局可访问的对象编写一些东西。这部分是因为我发现了测试驱动开发,不可能用一个可以让你隔离你正在测试的对象来替换“真正的”静态对象。但是,2 个“更好”示例中的大多数代码与该静态对象隔离这一事实意味着将其替换为以其他方式提供的代码是微不足道的。
这里的教训是,如果您要使用静态的全局对象,请尽可能多地将它们锁定在抽象后面。但是,如果您对最佳实践完全感兴趣,请避免使用它们。请注意,单例是最糟糕的静态全局对象。