private function assembleView(&$arrAssemblyList, IView $aView) { if (!($sViewId = $aView->id())) { throw new Exception("在装配视图时,遇到未注册的视图。"); } // 视图已经装配过 if (isset($this->arrViewAssemblyStat[$sViewId])) { // echo "view {$sViewId} has assembled, pre priority: {$this->arrViewAssemblyStat[$sViewId]['priority']}, this time priority: {$arrAssemblyList['filter']['priority']} <br />\r\n" ; // 比较两个 slot 的优先级 if ($arrAssemblyList['filter']['priority'] > $this->arrViewAssemblyStat[$sViewId]['priority']) { // echo "remove {$sViewId} --- <<< {$this->arrViewAssemblyStat[$sViewId]['list']['id']} @ {$this->arrViewAssemblyStat[$sViewId]['listpos']} <br />" ; // 从原装配单中清除 unset($this->arrViewAssemblyStat[$sViewId]['list']['items'][$this->arrViewAssemblyStat[$sViewId]['listpos']]); unset($this->arrViewAssemblyStat[$sViewId]); } else { return; } } // 写入装配单 $arrAssemblyList['items'][] = array('type' => 'view', 'id' => $sViewId, 'object' => $aView); // 记录装配状态 end($arrAssemblyList['items']); $nPos = key($arrAssemblyList['items']); $this->arrViewAssemblyStat[$sViewId] = array('list' => &$arrAssemblyList, 'listpos' => $nPos, 'priority' => $arrAssemblyList['filter']['priority']); // echo "assembling view [ {$sViewId} +++ >>> {$arrAssemblyList['id']} @ {$nPos} ] as priority {$arrAssemblyList['filter']['priority']} <br />" ; }