2021SC@SDUSC
从这一篇开始,我们将要和对应的html文件一起分析,通过调用JavaScript文件的方式来推测更多使用的细节。
view/home/ceshi_hooks.html
这里是钩子。钩子是什么?https://www.jianshu.com/p/3382cc765b39介绍了钩子函数的使用方式。Hook技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。当然,这篇文章说的是Java程序里的Hook技术,但在JavaScript中也可以如此看待。
在这个Html文档中,让我们看看测试的钩子是如何运转的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--带 $hook_type 参数的 视图钩子调用,HOOK+@钩子名+@$hook_type-->
{
{HOOK@adminArticleEdit@1|safe}} <hr>
<!--带 $hook_key 参数 视图钩子调用, HOOKS+@钩子名[$hook_key]-->
{
{HOOKS@adminArticleEdit['aaaa']|safe}}<hr>
{
{HOOKS@adminArticleEdit['bbbb']|safe}}<hr>
<!--带 $hook_type 和 $hook.key 参数 视图钩子调用, HOOKS+@钩子名[$hook_type]+@$hook_type-->
{
{HOOKS@adminArticleEdit@2['bbbb']|safe}}<br>
<!--默认调用 HOOK+@钩子名-->
{
{HOOK@adminArticleEdit|safe}}
</body>
</html>
前面是Html文档惯有的写作模式,不必多说。body
一块让我们重点看一看。这里是写了一些示例的钩子调用,包括带$hook_type
参数的视图钩子调用,带$hook_type
和$hook.key
参数视图钩子调用,带$hook_type
和$hook.key
参数视图钩子调用,默认调用。
src/controller/home/detail.js
下面再让我们回头去看src/controller/home/detail.js
。这里存放了一些钩子相关的函数。
this.assign('info', info);
// 文档内容底部钩子钩子
await this.hook('documentDetailAfter', info);
// 视频播放器钩子
await this.hook('videoPlayer', info);
// 加载页面头部底部钩子
const editor = !think.isEmpty(info.editor) ? info.editor : await this.model('cmswing/model').get_model(info.model_id, 'editor');
const field_group = await this.model('cmswing/model').get_model(info.model_id, 'field_group');
const fields = await this.model('cmswing/attribute').get_model_attribute(info.model_id, true);
const fg = parse_config_attr(field_group);
const farr = [];
for (const key in fg) {
for