【问题标题】:Multiple active screens in pure MVC how to manage notification for particular screen?纯MVC中的多个活动屏幕如何管理特定屏幕的通知?
【发布时间】:2011-12-19 13:31:58
【问题描述】:

纯 MVC -

在我的应用程序中,有多个屏幕被最小化,就像在 Windows 桌面中一样。 现在每个都有不同的中介实例,它们具有相同的通知。 因此,如果我在一个屏幕上进行更改,说按下某个按钮>>,它将一些命令>>发送到代理>>然后代理向中介发送通知。

但由于多个屏幕处于活动状态,它会显示所有屏幕的变化,因为它们也由代理通知。

如何确保代理调用特定视图组件(调解器)而不是调解器的所有实时实例?

【问题讨论】:

    标签: apache-flex adobe puremvc


    【解决方案1】:

    在 PureMVC 结构中,代理通知被发送到中介的所有实例 尽管您可以将执行的操作限制为除所选组件之外的所有其他组件。如下所示

    • 在按钮单击期间将所选组件分配给singleton class 变量
    • 检查调解器中的handleNotification函数中的id,如下所示

    示例:

        public static const ADD_BOLD_STYLE:String = "AddBoldStyle";
    
        public function TextElementMediator(objViewComponent:Object)
        {
            super(NAME, objViewComponent);
            _objTextData = objTextData; 
        }
    
        public function get textElement():TextElement
        {
            return viewComponent as TextElement;
        }
    
        override public function listNotificationInterests():Array
        {
            return [ADD_BOLD_STYLE];
        }
    
        override public function handleNotification(notification:INotification):void
        {
            switch(notification.getName())
            {               
                case ADD_BOLD_STYLE:
                    if(textelement == singleton.selectedObject)
                    {
                        //Process your data
                    }
                    break;
            }
        }
    

    这里的单例是指selectedObject

    【讨论】:

    • 如果级联窗口打开,此解决方案可能会失败。如果窗口A打开B和B打开C,如何处理??
    【解决方案2】:

    您提出问题的方式是您正在按下其中一个屏幕上的按钮并想要更新 那个 视图。应该发生的是视图应该将事件分派给中介。只有当您需要来自代理的业务逻辑或数据时,您才应该向命令层发送通知。您说您正在通知代理,这使我相信您需要来自代理的 FRESH 数据,即您正在从后端请求 new 数据。当检索到新数据时,它将向中介发送通知以使用新数据更新视图。如果数据发生变化,应用程序的其余部分应更新。

    如果不是所有的中介都关心这些数据,那么您可能应该为不同的窗口子类化中介并覆盖“执行”方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多