此标签扩展了
{% partial %}Twig 标签。
{% ajaxPartial %} 标签在页面上渲染局部内容,并支持 AJAX 处理程序、自更新和短更新语法。这通常被称为自更新局部。
{% ajaxPartial "contact-form" %}局部内容仅在首次加载时用特定的 HTML 标签包裹。通过 AJAX 对局部进行后续更新时,不包含此包裹标签。
<div data-ajax-partial="contact-form">
... Contents go here ...
</div>使用 AJAX 局部时,您不再需要指定选择器来更新它。在使用 data-request-update 属性时,只需将 true 传递给 数据属性 API。
<button
data-request="onRefresh"
data-request-update="{ contact-form: true }">
刷新
</button>您也可以通过将 _self 用作局部名称,从局部内部更新它。
<button
data-request="onRefresh"
data-request-update="{ _self: true }">
刷新
</button>您还可以传递 ^ 符号来前置内容,以及 @ 符号来追加内容到容器,而不是替换它。
<button
data-request="onRefresh"
data-request-update="{ _self: '@' }">
追加
</button>{% ajaxPartial %} 接受一个 lazy 属性,该属性会将内容的渲染推迟到页面加载完毕。在以下示例中,posts 局部将在页面加载完成后更新。
{% ajaxPartial 'posts' lazy %}lazy body 属性允许在加载之前指定初始内容,后跟 {% endpartial %} 标签。
{% ajaxPartial 'posts' lazy body %}
<p>正在加载文章...</p>
{% endpartial %}需要注意的是,{% ajaxPartial lazy %} 标签不会立即渲染局部。相反,它输出一些初始内容,其中包含一个 data-auto-submit 数据属性,该属性由 轮询请求 使用。此属性在页面加载后执行 AJAX 请求以加载局部内容。为了防止无限循环,后续的局部更新中不包含此属性。
这是首次页面加载时在浏览器中显示的样子:
<div
data-request="onAjax"
data-request-update="{ _self: true }"
data-auto-submit>
<p>正在加载文章...</p>
</div>不要在您的局部中包含上述标记。
{% ajaxPartial lazy %}标签将自动为您包含它。
当从 AJAX 局部内部调用 AJAX 处理程序时,会触发一个捕获页面生命周期(见下文),从而可以在所请求的局部中使用 AJAX 处理程序。
以下示例展示了如何使用自更新局部提交一个简单的联系表单。
description = "自更新局部"<?
function onSubmitContactForm()
{
$this['submitted'] = true;
}
?>{% if submitted %}
<p>感谢您联系我们!</p>
{% endif %}
<button
data-request="onSubmitContactForm"
data-request-update="{ _self: true }">
提交
</button>使用 CMS 组件 的局部也将使其 AJAX 处理程序可用。
[contactForm]<button
data-request="contactForm::onSubmit"
data-request-update="{ _self: true }">
提交
</button>当从 AJAX 局部调用处理程序时,它将触发一个不同的生命周期,称为捕获生命周期。捕获生命周期会渲染整个页面,但它将内容渲染到虚空。这样,页面被完全初始化,包括所有使用的局部和 AJAX 处理程序。
由于它算作一个完整的页面渲染,这意味着当使用 AJAX 局部处理程序时,可能会调用 onRun 组件方法。您可以使用 Request::ajax() 辅助方法 来确定请求是否是 AJAX 请求的结果。