跳至主要内容
版本: 5.1

Ajaxdemo 组件

这是一个示例组件,您可以从 com_ajaxdemo 下载。

它演示了在 Joomla 组件中使用 Ajax;有关更多背景信息,请参见 Ajax and JsonResponse 部分。

它可以轻松地适应以演示使用 com_ajax 用于插件和模板;只需将 media/js/divide.js 中的 url 更改为指向 com_ajax 而不是 com_ajaxdemo,并设置其他必需的 URL 参数。

下载源代码后,将 com_ajaxdemo 目录压缩并安装组件。

然后转到 <your domain>/index.php/component/ajaxdemo 在您的 Joomla 实例上运行它。

该组件显示一个表单,用于捕获两个数字 A 和 B,以及一个用于计算 A/B 的按钮。除法是通过对服务器的 Ajax 调用执行的,如果 B 为零,则会引发异常。

下面简要概述了主要源文件。

管理员服务提供商

路径: administrator/components/com_ajaxdemo/services/provider.php

这是基本 MVC 组件的样板代码。对于组件,此文件放在 Joomla 文件系统中的 /administrator 下。如果您想完全理解它,请阅读 依赖注入 部分。

从这个文件中,Joomla 实例化了默认的 扩展和调度程序类,以及一个 MVC 工厂类,它为我们的组件创建模型、视图和控制器类。

默认的调度程序类检查 URL 的 task 参数,并根据它确定要实例化的控制器。默认控制器(当没有 task 参数时)是 DisplayController。当按下“除法”按钮时,JavaScript 代码使用设置为“ajax.divide”的 task 发送 Ajax 请求。基于此,默认调度程序将实例化此组件的 AjaxController 并调用其 divide 方法。

网站显示控制器

路径: components/com_ajaxdemo/src/Controller/DisplayController.php

当您转到显示表单的网站页面(即导航到 URL .../index.php/component/ajaxdemo)时,此控制器的 display 方法会被运行。

它获取相关的模型和视图类,并调用视图实例上的 display()。

网站 Ajaxdemo 视图

路径: components/com_ajaxdemo/src/View/Ajaxdemo/HtmlView.php

它调用模型来设置表单,然后调用 display() 来运行 tmpl 文件。

网站 Ajaxdemo 模型

路径: components/com_ajaxdemo/src/Model/AjaxdemoModel.php

它根据 表单 中的描述设置表单。

网站 Ajaxdemo tmpl 文件

路径: components/com_ajaxdemo/tmpl/ajaxdemo/default.php

它使用 Web 资产管理器 来附加启动 Ajax 调用的 JavaScript divide.js。

它使用 将变量传递给 JavaScript,将您的 Joomla 实例的根 URL 传递给 JavaScript 代码,因为这使得形成 URL 的工作变得更容易。

然后它输出 <form> html,包括具有 onclick 监听器的按钮来运行 divide.js 代码。

“除法”XML 表单

路径: components/com_ajaxdemo/forms/divide_form.xml

它使用 Joomla 标准表单字段 用于表单中的字段。

JavaScript 代码

路径: media/com_ajaxdemo/js/divide.js

这是按下“除法”按钮时运行的代码。

它启动 Ajax 调用并处理响应。

Ajax 控制器

路径: components/com_ajaxdemo/src/Controller/AjaxController.php

这是具有 divide() 方法的控制器,该方法在 Ajax 请求由 Joomla 服务时被调用。

它计算 a/b 并使用 JsonResponse 将结果发送回 JavaScript 代码。

如果 b 为零,它会将“除以零”异常发送到 JsonResponse,该异常将映射到一个带有 success=false 的 JSON 对象并返回。

它还设置了几个虚拟排队消息以演示 JsonResponse 的这方面。

media joomla.asset.json 文件

路径: media/com_ajaxdemo/joomla.asset.json

这是 Web 资产管理器 用于定义 JavaScript 资产及其依赖项所需的文件。