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 资产及其依赖项所需的文件。