CodeSmith 使用教程(12) 使用主从代码模板
来源:互联网 发布:ubuntu 32位兼容库 编辑:程序博客网 时间:2024/05/22 10:25
在前面的教程CodeSmith 使用教程(3): 自动生成Yii Framework ActiveRecord 我们使用了主,从模板来实现了从数据库为Yii Framework生成多个表的ActiveRecord类定义,中CodeSmith项目中通过主模板和从模板的配合可以实现复杂的代码生成过程,主模板和从模板的关系有点类似主程序和子函数的关系。使用主-从模板的基本步骤如下:
- 定义从模板,从模板可以定义属性
- 定义主模板,中主模板中如果要使用从模板,首先需要在主模板中注册从模板,主模板中也也可以定义属性,主模板和从模板中的属性可以通过定义“合并”模式构造最终模板所定义的属性集合。
- 调用主模板,设置主模板和从模板所需的属性生成所需代码
注册子模板
<%@ Register Name="Header" Template="Header.cst" MergeProperties="True" ExcludeProperties="IncludeMeta" %>
Name:子模板在主模板中的类型名称,在主要模板中可以通过该类型创建子模板的实例
Template: 子模板文件名
MergeProperties: 是否需要把子模板中定义的属性:“合并”到主模板中。缺省为False
ExcludeProperties: 如果子模板的属性合并到主模板中时需要排除的属性列表,以逗号分隔。
子模板复制主模板中的属性
MergeProperties=”True” 可以把从模板中的属性合并到主模板中,如果从模板需要引用主模板的属性,比如主模板中定义了服务器地址,在多个子模板中都需要引用这个属性,此时可以通过复制父模板属性CopyPropertiesTo
来实现:
// instantiate the sub-templateHeader header = this.Create<Header>();// copy all properties with matching name and type to the sub-template instancethis.CopyPropertiesTo(header);
CopyPropertiesTo方法比较主模板中定义的属性和子模板中定义的属性,如果发现从模板中定义的属性和主模板中定义的属性名称类型相同(匹配)则把主模板中属性值复制到子模板中。
设置子模板属性
在主模板中要创建子模板的实例,可以直接通过Create方法
// instantiate the sub-templateHeader header = this.Create<Header>();// include the meta tagheader.IncludeMeta = true;
Create中的Header为注册子模板时Name来定义的类型,通过Create创建子模板的实例后,就直接可以通过该实例的属性来访问子模板中的属性,比如上面代码中IncludeMeta为子模板中定义的一个属性。
// instantiate the sub-template.Header header = this.Create<Header>();// render the sub-template to the current output stream.header.Render(this.Response);
第二种方法是把结果输出到单独的文件中:
// instantiate the sub-template.Header header = this.Create<Header>();// render the sub-template to a separate file.header.RenderToFile("Somefile.txt");
具体的例子可以参见CodeSmith 使用教程(3): 自动生成Yii Framework ActiveRecord
- CodeSmith 使用教程(12) 使用主从代码模板
- CodeSmith 使用教程(12) 使用主从代码模板
- CodeSmith: 使用主从代码模板 Register
- CodeSmith 使用教程(2): 编写第一个代码模板
- CodeSmith 使用教程(2): 编写第一个代码模板
- CodeSmith 使用教程(15) 为Yii Framework 创建生成ActiveRecord的代码模板
- CodeSmith 使用教程(15) 为Yii Framework 创建生成ActiveRecord的代码模板
- codeSmith的使用教程
- CodeSmith使用教程
- CodeSmith 使用教程: 总结
- CodeSmith 使用教程: 总结
- 使用CodeSmith 生成代码
- CodeSmith 使用教程(1): 概述
- CodeSmith 使用教程(13) 调试
- CodeSmith 使用教程(1): 概述
- CodeSmith 使用教程(13) 调试
- CodeSmith 使用教程(16) 使用XMLProperty
- CodeSmith 使用教程(16) 使用XMLProperty
- c#8大优势
- web项目开发编码问题总结
- Nginx 基础篇(1)
- vnc 代码阅读笔记3
- win7保存登录凭证 连接vss不需要输入用户名密码登录
- CodeSmith 使用教程(12) 使用主从代码模板
- bash参考手册之三(基本的Shell特性)续四
- 推荐下载:Zoomla!逐浪CMS1.1版
- java 并发主题详解
- Zoomla!逐浪CMS网站内核管理系统用户手册
- 红帽Linux中出现”This system is not registered with RHN”的解决方案
- 如何在VS2010中打开VS2012的项目
- 高效开发乘胜追击-Zoomla!逐浪CMS1.2版发布
- 面向对象的 静态属性,静态方法 static 详解