`
lyunabc
  • 浏览: 553766 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

CodeSmith 使用教程(12) 使用主从代码模板

 
阅读更多

在前面的教程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-template
Header header = this.Create<Header>();

// copy all properties with matching name and type to the sub-template instance
this.CopyPropertiesTo(header);

CopyPropertiesTo方法比较主模板中定义的属性和子模板中定义的属性,如果发现从模板中定义的属性和主模板中定义的属性名称类型相同(匹配)则把主模板中属性值复制到子模板中。

设置子模板属性

在主模板中要创建子模板的实例,可以直接通过Create方法

// instantiate the sub-template
Header header = this.Create<Header>();

// include the meta tag
header.IncludeMeta = true;

Create中的Header为注册子模板时Name来定义的类型,通过Create创建子模板的实例后,就直接可以通过该实例的属性来访问子模板中的属性,比如上面代码中IncludeMeta为子模板中定义的一个属性。

<header style="padding: 15px 0px 0px; border: 0px; margin: 0px; font: inherit; vertical-align: baseline; color: rgb(85, 85, 85); font-family: 'Times New Roman', Helvetica, serif; font-size: 14px; line-height: 21px;"></header><header style="padding: 15px 0px 0px; border: 0px; margin: 0px; font: inherit; vertical-align: baseline; color: rgb(85, 85, 85); font-family: 'Times New Roman', Helvetica, serif; font-size: 14px; line-height: 21px;"><span style="padding: 0px; border: 0px; margin: 0px; font: inherit; vertical-align: baseline; line-height: inherit;">从子模板输出结果</span></header><header style="padding: 15px 0px 0px; border: 0px; margin: 0px; font: inherit; vertical-align: baseline; color: rgb(85, 85, 85); font-family: 'Times New Roman', Helvetica, serif; font-size: 14px; line-height: 21px;">创建好子模板的实例,设置好子模板的属性,在主模板中就可以让子模板输出结果,有几种方法可以从子模板输出内容。</header><header style="padding: 15px 0px 0px; border: 0px; margin: 0px; font: inherit; vertical-align: baseline; color: rgb(85, 85, 85); font-family: 'Times New Roman', Helvetica, serif; font-size: 14px; line-height: 21px;">第一种是把子模板生成的结果直接插入到主模板中</header><header style="padding: 15px 0px 0px; border: 0px; margin: 0px; font: inherit; vertical-align: baseline; color: rgb(85, 85, 85); font-family: 'Times New Roman', Helvetica, serif; font-size: 14px; line-height: 21px;"><pre name="code" class="csharp">// instantiate the sub-template. Header header = this.Create&lt;Header&gt;(); // render the sub-template to the current output stream. header.Render(this.Response); </pre> <br><span style="color: rgb(85, 85, 85); font-family: 'Times New Roman', Helvetica, serif; font-size: 14px; line-height: 26px;">第二种方法是把结果输出到单独的文件中:</span><br></header><header style="padding: 15px 0px 0px; border: 0px; margin: 0px; font: inherit; vertical-align: baseline; color: rgb(85, 85, 85); font-family: 'Times New Roman', Helvetica, serif; font-size: 14px; line-height: 21px;"><span style="color: rgb(85, 85, 85); font-family: 'Times New Roman', Helvetica, serif; font-size: 14px; line-height: 26px;"></span><pre name="code" class="csharp">// instantiate the sub-template. Header header = this.Create&lt;Header&gt;(); // render the sub-template to a separate file. header.RenderToFile("Somefile.txt"); </pre> <br><span style="color: rgb(85, 85, 85); font-family: 'Times New Roman', Helvetica, serif; font-size: 14px; line-height: 26px;">具体的例子可以参见</span><a href="http://www.imobilebbs.com/wordpress/archives/4196" style="padding: 0px; border: 0px; margin: 0px; font: inherit; vertical-align: baseline; color: rgb(0, 133, 207); text-decoration: initial; line-height: 26px; outline: none; font-family: 'Times New Roman', Helvetica, serif; font-size: 14px;">CodeSmith 使用教程(3): 自动生成Yii Framework ActiveRecord</a></header>
分享到:
评论

相关推荐

    codesmith三层代码模板代码模板

    codesmith三层代码模板代码模板,codesmith三层代码模板代码模板,codesmith三层代码模板代码模板,codesmith三层代码模板代码模板,codesmith三层代码模板代码模板,codesmith三层代码模板代码模板。

    CodeSmith使用教程 - v1.01

    以上各章内容构成了 CodeSmith 使用教程的基础,通过学习这些章节,开发者可以熟练掌握 CodeSmith 的核心功能,从而在项目开发中有效利用模板技术提高效率,减少错误。随着对 CodeSmith 深入的理解和实践,你会发现...

    codesmith nettiers-2.3.1.zip codesmith 模板

    codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip...

    CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf

    CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf ...

    CodeSmith开发使用教程资料

     CodeSmith使用教程,开发资料,PDF高清淅版,对CodeSmith熟悉的朋友都知道,CodeSmith是一个基于模板的代码生成工具,它使用类似于ASP.NET的语法来生成代码或文本,本教程将带你掌握CodeSmith的使用方法和原理等...

    CodeSmith安装包已经模板代码和使用教程

    CodeSmith安装包已经模板代码和使用教程,原版程序+注册机+教程(包含图文教程),视频教程,三层模板的通用代码生成模板

    CodeSmith 使用手册 简易教程

    通过这两个文件的学习,开发者可以全面了解CodeSmith的使用方法,从创建简单的模板到构建复杂的代码生成流程,从而提升开发效率,减少手动编写重复代码的时间。同时,熟练掌握CodeSmith也能帮助团队保持代码一致性,...

    codesmith模板及使用说明

    **codesmith模板及使用说明** CodeSmith是一款强大的代码生成工具...通过熟练掌握和使用CodeSmith模板,开发者可以更专注于业务逻辑的实现,而不是基础代码的编写。希望这个更新后的C#模板能为你的开发工作带来便利。

    CodeSmith开发使用教程资料 pdf

    总的来说,这份CodeSmith开发使用教程资料将全面覆盖CodeSmith的基本操作、高级特性以及实际应用案例,无论是新手还是老手,都能从中受益匪浅。通过学习和实践,你将能够充分利用CodeSmith的潜力,提升软件开发的...

    codesmith生成代码模板

    【codesmith生成代码模板】是一种高效开发工具,它利用模板技术来自动化代码生成,从而极大地提高了软件开发的效率。在IT行业中,特别是在大型项目或快速迭代的开发环境中,手动编写重复性的代码会消耗大量时间,而...

    MySql数据库CodeSmith模板

    MySQL数据库CodeSmith模板是一种高效的代码生成工具,它利用CodeSmith的强大功能,自动化地根据MySQL数据库中的表结构生成相应的代码,从而极大地提高了开发效率。CodeSmith是一款流行的数据驱动的代码生成器,它...

    CodeSmith使用基础教程

    首先,我们从“CodeSmith使用基础教程 一 — 模板”开始。模板是CodeSmith的核心,它定义了生成代码的结构和逻辑。你可以创建自定义模板,以满足特定项目或编程语言的需求。模板可以包含变量、循环、条件语句等,...

    简单的CodeSmith模板

    总结起来,"简单的CodeSmith模板"是指使用CodeSmith的模板语言和功能创建的基础代码生成模板。掌握CodeSmith模板的编写技巧和应用,能显著提升开发团队的生产力,使他们能够快速地生成符合规范的、一致的代码,降低...

    CodeSmith企业版5.22+中文详细注释三层+抽象工厂模板+许可文件+中文件详细教程.part3

    CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成...

    CodeSmith模板集合C#版

    这个"CodeSmith模板集合C#版"包含了一系列预设的模板,能够帮助开发者自动生成常见的C#代码,例如对象持久化和数据库事务处理。下面将详细探讨这两个主要的知识点。 一、对象持久化 对象持久化是将程序中的对象...

    codesmith 3层代码生成模板

    《codesmith 3层代码生成模板详解》 Codesmith,作为一个强大的代码生成工具,深受广大开发者喜爱,尤其在企业级应用开发中,它能够显著提高开发效率,减少重复劳动。本文将详细介绍Codesmith的3层架构代码生成模板...

    CodeSmith初学者教程

    6. 使用模板库:CodeSmith社区提供丰富的模板资源,初学者可以先尝试使用现成的模板,再逐步学习自定义模板。 四、CodeSmith在asp.net开发中的应用 在asp.net开发中,CodeSmith常用于生成常见的数据访问层(DAL)、...

    Java 代码生成器CodeSmith是一个好工具

    CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成...

    CodeSmith基于模板的代码生成工具

    CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成...

    CodeSmith模板(抽象工厂版)

    CodeSmith是一款强大的代码生成工具,它能够帮助程序员快速地生成大量重复性的代码,提高开发效率。这个"CodeSmith模板(抽象工厂版)"是专为实现抽象工厂设计模式定制的一套模板集合,适用于构建可扩展且易于维护的...

Global site tag (gtag.js) - Google Analytics