1

正如我之前的问题中提到的,我是 ATK4 的新手,目前正在学习,所以可能会有更多问题。现在到我的问题。

Sidebar在我的模板中创建了一个区域“”shared.html并将视图添加到它,如下所示:

class Frontend extends ApiFrontend {
    function init(){
        parent::init();

        /* 
            Other stuff here
        */

        $this->addLayout('Sidebar');
    }

    function layout_Sidebar() {
        $this->add('View_Menu', null, 'Sidebar');
    }
}

然后我正在创建这样的视图:

class View_Menu extends AbstractView {
    function init(){
        parent::init();

        $this->add('HtmlElement')
            ->setElement('a')
            ->setAttr('href', 'testurl')
            ->set('Link');
    }
}

这给了我以下错误:

Spot is not found in owner's template

Additional information:

    spot: Content

提供 add 函数$this->template->top_tag作为第三个参数解决了这个问题:

$this->add('HtmlElement', null, $this->template->top_tag)
    ->setElement('a')
    ->setAttr('href', 'testurl')
    ->set('Link');

...但是我真的必须将它添加到视图中的每个 add() 调用中吗?这似乎不对,我很确定不是!

4

1 回答 1

2

创建 AbstractView 时,需要指定默认模板。默认情况下,您的 AbstractView 将使用 shared.html 中的区域。换句话说,AbstractObject 假定它替换的区域的模板。

当您创建 defaultTemplate() 或将第四个参数传递给 add() 时,您可以指定一个不同的文件用于侧边栏菜单的模板。

无论哪种方式 - 模板都应包含将显示任何子元素的输出的位置。

您可以从“View”类继承,该类已经依赖于仅包含 . 您使用 HtmlElement 的想法就是这样,因为 HtmlElement 扩展了 View。

于 2012-08-03T02:30:07.560 回答