你如何在 OctoberCMS 的局部渲染组件?

Posted

技术标签:

【中文标题】你如何在 OctoberCMS 的局部渲染组件?【英文标题】:How do you render a component within a partial in OctoberCMS? 【发布时间】:2020-09-25 07:39:13 【问题描述】:

在 OctoberCMS 中,我正在创建一个组件。在组件的 default.htm 部分文件 (/acme/myplugin/components/mycomponent/default.htm) 中,我可以通过以下方式包含任何其他已注册的组件:

% component 'someComponentName' %

但是,如果我有以下代码来处理 AJAX 请求:

public function onAjaxRequest()

    return [
        '#ajaxUpdate' => $this->renderPartial('@dates-partial'),
    ];

在我的dates-partial.htm 文件中,我放置了与default.htm 文件中相同的内容,someComponentName 组件未呈现。我还尝试将以下内容放在文件顶部:

[someComponentName]
==

但是这会直接作为文本输出到页面。

如何让renderPartial() 渲染包含组件的部分?

【问题讨论】:

您从哪里处理onAjaxRequest ajax 请求。将组件包含在其他组件的部分中是不好的做法,如果要共享代码,则应使用主题部分。一旦你嵌套组件,它会导致意外的行为,有时它会起作用,有时它不会。 @HardikSatasiya onAjaxRequest 由我的插件组件处理。我不确定“使用部分主题”是什么意思。我将部分放在我的主题目录中,但它仍然具有相同的行为。 我已经添加了我的案例,您可以为您检查它的工作原理。如果你错过了什么。 【参考方案1】:

您好,我尝试了您的方法,但似乎对我有用。让我分享一下我是怎么做的。

我的页面

title = "compo-in-partial-in-ajax"
url = "/compo-partial-ajax"
layout = "default"
is_hidden = 0

[newCompo]

[newOne]
==
<!-- AJAX enabled form -->
<form data-request="onTest">
    <!-- Action button -->
    <button type="submit">Call Ajax</button>
</form>

<div id="ajaxUpdate">
Default content.
</div>
% component 'newCompo' %

我添加了 2 个组件

    newCompo % component 'newOne' %,所以我在里面渲染另一个组件。 newOne

这是我的 ajax 处理程序

public function onTest() 
    return ['#ajaxUpdate' => $this->renderPartial('@partial.htm')];

newCompo 组件的 -> default.htm

% component 'newOne' %

newOne 组件的 -> default.htm

<h1>Newone</h1>

components/newcompo 内部的部分文件 -> partial.htm

<h4>partial</h4>
% component 'newOne' %

输出


正常

ajax 调用后

【讨论】:

以上是关于你如何在 OctoberCMS 的局部渲染组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OctoberCMS 中获取基本网址?

OctoberCMS - 如何在组件内调用函数

forms组件的渲染错误信息,全局和局部钩子函数,cookie,session

如果子组件发生更改,如何重新渲染父组件

如何在父组件中强制刷新子组件

用vue router如何获得当前页面的路由?