首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不使用一个基本的方法来注册一个视图的点击事件(比如ButtonView)

为什么不使用一个基本的方法来注册一个视图的点击事件(比如ButtonView)
EN

Stack Overflow用户
提问于 2012-06-03 15:58:17
回答 1查看 31关注 0票数 0

假设有一个buttonView (即.一个简单的按钮)。要在我的rootView中注册单击,请执行以下操作:

通常遵循第一种方法:类按钮{ var RootView视图:按钮视图;...buttonView.addEventListener( ButtonView.CLICK,buttonView_click );... }

我想知道,为什么不像这样遵循基本的方法(第二种方法):

代码语言:javascript
运行
复制
class RootView 
{
   var buttonView:ButtonView ; 
   buttonView.setFunction( buttonView_click ) ;

}


class ButtonView()
{
    public function setFunction(  someFunction:Function)
    {
        viewFunctionArray_Arr.push( someFunction ) 
    }

    public function onClick()
    {
        // remove dispatchEvent from here , instead 

        for ( var i=0; i< viewFunctionArray_Arr.length; i++)
        {
            //calling the registered functions of all the views one by one
            viewFunctionArray_Arr[i] ( ) ; 
        }

    }


}

如果解释是关于“松散耦合”,那么我想知道,“第一种方法”是如何松散耦合的,因为毕竟在第一种方法中,我们在需要它的视图中使用实例"buttonView“。所以rootView需要知道buttonView的事。不是吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-08 00:20:22

当您使用addEventListener()时,Flash player所做的事情与您的第二种方法非常相似。

我使用addEventListener()而不是传递对函数的引用的一个原因是为了避免潜在的内存泄漏:

addEventListener()有一些可选的参数。最后一个指定使用弱引用:addEventListener(MouseEvent.CLICK, eventHandler, false, 0, true)。弱引用不会阻止对象被垃圾回收。

有些情况下,当一个对象被释放时,你需要清理一些东西(例如:删除事件侦听器),使用弱引用可以减轻一些清理任务。

关于松散耦合,我认为这两种方法是相同的。在一种情况下,父对象需要知道子视图调度了一个事件。在另一种情况下,父级需要知道它应该将事件处理函数传递给视图。在我看来,这两者都是松散耦合的,没有什么可以阻止您在其他地方使用子视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10868757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档