Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何调用Flex上我的TitleWindow组件之外的remoteObject方法?_Actionscript 3_Apache Flex_Actionscript_Datagrid_Flash Builder - Fatal编程技术网

Actionscript 3 如何调用Flex上我的TitleWindow组件之外的remoteObject方法?

Actionscript 3 如何调用Flex上我的TitleWindow组件之外的remoteObject方法?,actionscript-3,apache-flex,actionscript,datagrid,flash-builder,Actionscript 3,Apache Flex,Actionscript,Datagrid,Flash Builder,我有一个标题窗口组件。它允许我保存通过3TextInput提供的一些数据 该数据“填充”另一个标题窗口组件中的下拉列表,而不是原始组件中的下拉列表 如何调用填充(或刷新)我的DropDownList的remoteObject方法 任何想法都将不胜感激 如果您愿意,您可以简单地使用单例作为模型,这将允许您共享数据,但请注意只将需要共享的数据保存在此处,否则它将成为一场全球性的噩梦 使用单例意味着您将拥有一个只能有一个实例的类。如果在引用该类时将属性放入该类,则在整个应用程序执行过程中,该类都将是相

我有一个
标题窗口
组件。它允许我保存通过3
TextInput
提供的一些数据

该数据“填充”另一个
标题窗口
组件中的
下拉列表,而不是原始组件中的
下拉列表

如何调用填充(或刷新)我的
DropDownList
remoteObject
方法


任何想法都将不胜感激

如果您愿意,您可以简单地使用单例作为模型,这将允许您共享数据,但请注意只将需要共享的数据保存在此处,否则它将成为一场全球性的噩梦

使用单例意味着您将拥有一个只能有一个实例的类。如果在引用该类时将属性放入该类,则在整个应用程序执行过程中,该类都将是相同的内存

将单例类或单个属性标记为Bindable将使其成为可绑定的,这样您就可以监视更改并调用函数

把这些放在一起,你会得到这样的结果:

[Singleton.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];
[MyTitleIndowWithalist]

var instance:Singleton = Singleton.getInstance();
BindingUtils.bindSetter(funcUpdateList, instance, "myListData");

private function funcUpdateList(data:Object)
{
      myList.dataProvider = data as Array;
}
另一个选项是创建一个携带数据有效负载的事件,从第一个标题窗口发送该事件,并捕获它,问题是你必须在我相信的PopUpManager或SystemManager上注册侦听器,因为TitleWindow不是我相信的应用程序的直接子项。

单例是一种,你不应该养成使用它们的习惯。相反,只需从视图中分派一个事件,并从其他可以访问您的服务对象的对象中捕获它

请注意,您的服务不应该是任何视图的组成部分——视图的职责是显示数据和捕获用户更改数据的请求,而不是与服务器通信

有关使用此模式编写的应用程序的示例,请查看

  • [Refactoring with Mate]()-示例启用了视图源代码
  • -再次启用查看源
请注意,这些都是针对一些流行的框架编写的,但它们的编写方式使您可以轻松地用其他东西替换该框架代码,甚至

作为参考,在视图中直接调用服务层。在不更改视图的情况下,您无法调用其他服务,尽管使用静态服务意味着您可以从其他地方使用它

这种静态用法保留在后面的示例中,尽管今天我永远不会根据全局可访问对象编写任何东西。这部分是因为我发现了测试驱动的开发,不可能用一个可以隔离测试内容的对象来替换“真实”的静态对象。然而,2个“更好”示例中的大多数代码都与静态对象隔离这一事实意味着用其他方式提供的代码替换它是微不足道的


这里的教训是,如果要使用静态全局对象,请尽可能多地将它们锁定在抽象后面。但是,如果你对最佳实践感兴趣,就要避免它们。请注意,Singleton是最糟糕的静态全局对象。

如果它的flex使其可绑定到输入。