后端面板使用相同的 AJAX 库,如同 CMS 页面。
该库会自动包含并加载到后端页面。
后端 AJAX 处理器可以在控制器类或部件中定义. 在控制器类中, AJAX 处理器被定义为公共方法, 其名称以 "on" 字符串开头: onCreateTemplate, onGetTemplateList, etc.
后端 AJAX 处理程序可以返回一个数据数组、抛出异常或重定向到另一个页面。 你可以使用 $this->vars 来设置变量,并使用控制器的 makePartial 方法来渲染一个局部视图并返回其内容作为响应数据的一部分。
public function onOpenTemplate()
{
if (post('someVar') !== 'someValue') {
throw new ApplicationException('Invalid value');
}
$this->vars['foo'] = 'bar';
return [
'partialContents' => $this->makePartial('some-partial')
];
}AJAX 请求可以通过数据属性 API 或 JavaScript API 触发。 有关详细信息,请参参阅 前端 AJAX 库。 以下示例展示了如何使用后端按钮触发请求。
<button
type="button"
data-request="onDoSomething"
class="btn btn-default">
Do Something
</button>由于行为会将其方法合并到父控制器,因此在行为中定义的所有 AJAX 处理程序都可供控制器使用。在某些情况下,您可能希望在控制器中覆盖一个 AJAX 处理程序,您可以通过调用 asExtension 方法来做到这一点。
控制器 AJAX 处理程序优先,然后请求 Backend\Behaviors\FormController 行为并调用其处理程序。
function onDoSomething()
{
// Custom logic here
// ...
// Call the extension handler
return $this->asExtension('FormController')->doSomething();
}小部件实现与后端控制器相同的 AJAX 方法。AJAX 处理程序是小部件类的公共方法,其名称以 on 前缀开头。小部件 AJAX 处理程序与后端控制器 AJAX 处理程序之间的唯一区别是,当您在小部件局部文件(partials)中引用它时,您应该使用小部件的 getEventHandler 方法来返回小部件的处理程序名称。
<a
href="javascript:;"
data-request="<?= $this->getEventHandler('onPaginate') ?>"
title="Next page">Next</a>当从组件类或局部调用时,AJAX 处理器将以自身为目标。例如,如果组件使用别名 mywidget,处理器将以 mywidget::onName 为目标。上述操作将输出以下属性值:
data-request="mywidget::onPaginate"