继续Cmswind的研究
昨天明白了怎样对扩建进行扩展。今天继续分析src/controller/home/index/index。
两个需要搞明白的
-
this.active[] 到底有什么用?
查到thinkjs的文档,发现这是一种默认注入的方法,这里的this应该是controller:
默认注入参数
注入后可以在模版调用:
模版调用
-
this.hook 钩子有什么用?
根据昨晚到判断,这是对controller功能扩展。 hook方法
点击command + 鼠标左键 可以跟踪到hook 在 src/extend/controller.js
粗略看了一下是传入hook名字,然后缓存,然后读取关联的插件,然后初始化插件,然后返回对象数组或对象,赋值给前端。好处就是不用在同一个页面写太多代码,也方便管理。
今晚再详细看了一下,首先通过this.hook('hometitle'); 启动钩子,然后进入hooks方法,首先通过钩子名称‘hometitle’查询数据库 cmswing/hooks 返回钩子hometitle所有信息,主要是字段ext的内容
hooks表结构
然后通过读取ext字段再次查询数据库cmswing/ext, 这次查状态,状态为1就是开启的插件,开启后就读取钩子配置/controller/ext/{h}/hooks.js ,这里采用this.controller(上述路径),
- 模版加载顺序
cmswing采用nunjucks模版引擎。
模板引擎就是基于模板配合数据构造出字符串输出的一个组件。比如下面的函数就是一个模板引擎:
function examResult (data) {
return `${data.name}同学一年级期末考试语文${data.chinese}分,数学${data.math}分,位于年级第${data.ranking}名。`
}
--例子来自廖雪峰大神
主模版是index_index.html ,主模版框架来自inc_base.html,定了几个block,{% block style %} {% block content %} {% block script %} ,index_index.html 通过extends 继承后,可以拥有他的结构,同时可以重写上述block。
可以通过 {{ username }} 来输出变量,默认输出的变量会自动转义,如果不想被转义,可以通过 {{ username | safe }} 来处理。 这种{{ ... | ...}}都是过滤器,官方内置过滤器文档:http://jinja.pocoo.org/docs/2.10/templates/#id11
cmswing里面也自定了好多过滤器,详情在src/config/view.js
网友评论