更新部件

October CMS Documentation Docs

更新部件

当处理程序执行时,它可以准备在页面上更新的部件,通过推送拉取,可以用一些提供的变量呈现。

# 拉取部件更新

客户端浏览器在执行 AJAX 请求时可能会请求从服务器更新部件内容,这被认为是拉取内容更新。 以下代码在调用 onRefreshTime 事件处理程序 后呈现页面上 #myDiv 元素内的 mytime 部件。

<div id="myDiv">{% partial 'mytime' %}</div>

数据属性 API 使用 data-request-update 属性。

<!-- Attributes API -->
<button
    data-request="onRefreshTime"
    data-request-update="mytime: '#myDiv'">
    Go
</button>

JavaScript API 使用 update 配置选项:

// JavaScript API
$.request('onRefreshTime', {
    update: { mytime: '#myDiv' }
});

# 更新定义

应更新内容的定义被指定为类似 JSON 的对象,其中:

  • 左侧(键)是部件名称
  • 右侧(值)是要更新的目标元素

以下将请求使用 mypartial 内容更新 #myDiv 元素。

mypartial: '#myDiv'

多个部件用逗号分隔。

firstpartial: '#myDiv', secondpartial: '#otherDiv'

如果部件名称包含斜杠或破折号,则"引用"左侧很重要。

'folder/mypartial': '#myDiv', 'my-partial': '#myDiv'

目标元素将始终位于右侧,因为它也可以是 JavaScript 中的 HTML 元素。

mypartial: document.getElementById('myDiv')

# 附加和前置内容

如果选择器字符串前面带有 @ 符号,则从服务器接收到的内容将附加到元素中,而不是替换现有内容。

'folder/append': '@#myDiv'

如果选择器字符串前面带有^ 符号,则内容将被添加到前面。

'folder/append': '^#myDiv'

# 推送部件更新

相比之下,AJAX 处理程序 可以将内容更新从服务器端推送到客户端浏览器。 要推送更新,处理程序返回一个数组,其中键是要更新的 HTML 元素(使用简单的 CSS 选择器),值是要更新的内容。

下面的示例将使用在部件 mypartial 中找到的内容更新页面上具有 id myDiv 的元素。 onRefreshTime 处理程序调用 renderPartial 方法来渲染 PHP 中的部件内容。

function onRefreshTime()
{
    return [
        '#myDiv' => $this->renderPartial('mypartial')
    ];
}

注意:键名必须以标识符# 或类. 字符开头才能触发内容更新。

# 将变量传递给 部件

根据执行上下文,AJAX 事件处理程序 使变量可用于不同部件。

这些示例将为每个上下文的部件提供 result 变量:

// 从页面或布局 PHP 代码部分
$this['result'] = 'Hello world!';

// 从组件类
$this->page['result'] = 'Hello world!';

// 从后端控制器或小部件
$this->vars['result'] = 'Hello world!';

然后可以在部件中使用 Twig 访问此值:

<!-- Hello world! -->
{{ result }}