得到XHPChild的孩子

时间:2015-08-13 19:51:58

标签: hhvm hacklang xhp

我正在尝试将我的网站移至Hack和XHP。下面是我想要实现的代码结构的结构:

50

注意: <ui:backstageHeader> <ui:backstageHeader-navItem href="/">stories</ui:backstageHeader-navItem> <ui:backstageHeader-navItem href="/story/send">send a story</ui:backstageHeader-navItem> <ui:backstageHeader-navItem href="/aboutus">support</ui:backstageHeader-navItem> </ui:backstageHeader> 基本上呈现为:ui:backstageHeader-navItem,因此无需在此处附加其类。)

以下是<a href={$this->:href}>{$this->getCHildren}</a>的代码:

:ui:backstageHeader

我使用终端使用final class :ui:backstageHeader extends :ui:base { attribute :div; children (:ui:backstageHeader-navItem)*; protected function compose() { $dom = <section class="backstage-header"> <div class="container"> <div class="cell-logo"> <a href="/"> <span class="no23-logo-white"></span> </a> </div> <div class="cell-navigation"> </div> <div class="cell-account"> <div class="cell-login"> <div id="siteNav-login">Autentificare</div> </div> </div> </div> </section>; $mainContainer = $dom->getChildren("div")[0]; $cellNavigation = $mainContainer->getChildren("div")[1]; $navItems = <ul class="main-navigation"></ul>; foreach($this->getChildren() as $child) { $navItems->appendChild(<li>{$child}</li>); } $dom->appendChild($navItems); return $dom; } } 调试我的代码,一切都没问题;但是,当我到达浏览器时,我得到hhvm -m d <file.php>错误标题。这就是日志所说的:

500

错误来自

Catchable fatal error: Hack type error: Could not find method getChildren in an object of type XHPChild at /var/www/res/ui/backstage-header.php line 25

但是,不知何故,我需要从$cellNavigation = $mainContainer->getChildren("div")[1]; ul.main-navigation追加div.cell-navigation

我该怎么做?

2 个答案:

答案 0 :(得分:1)

根据我的经验,appendChild非常容易出现人为错误。这样做更容易:

$items = (new Vector($this->getChildren()))->map($child ==> <li>{$child}</li>);
return <div id="container">{$items}</div>;

如果您想将孩子们包裹在<li />

不确定这是否有效,但它会关闭。

答案 1 :(得分:0)

专业提示:您可以在XHP树中分配变量。

$root =
  <div>
    {$child = <span>
      Text children
    </span>}
  </div>;

现在$ child已设置为<span>元素。