WEB开发网
开发学院软件开发C语言 VTemplate模版引擎的使用--进阶篇 阅读

VTemplate模版引擎的使用--进阶篇

 2010-09-30 20:52:25 来源:WEB开发网   
核心提示: <ul class="topnews block_list bt"> <vt:foreach from="#.newsdata" item="news" index="i" id="ne

<ul class="topnews block_list bt">
  <vt:foreach from="#.newsdata" item="news" index="i" id="newslist">
  <li>
    <a href="{$:#.news.url}" title="{$:#.news.title htmlencode='true'}">{$:#.news.title htmlencode='true'}...</a>
  </li>
  </vt:foreach>
</ul>

在此文件的VT模版中,定义了一个id为"newslist"的<vt:foreach>标签,定义此id是为了在程序代码里控制新闻的输出和处理每条新闻的访问地址,也即是"{$:#.news.url}”变量表达式的值。

示例代码:

//获取所有名称为topnews的模版块
ElementCollection<Template> templates = this.Document.GetChildTemplatesByName("topnews");
foreach (Template template in templates)
{
    //根据模版块里定义的type属性条件取得新闻数据
    List<News> newsData = GetNewsData(template.Attributes.GetValue("type"));
    //设置变量newsdata的值
    template.Variables.SetValue("newsdata", newsData);
    //取得模版块下Id为newslist的标签(也即是在cnblogs_newsdata.html文件中定义的foreach标签)
    Tag tag = template.GetChildTagById("newslist");
    if (tag is ForEachTag)
    {
        //如果标签为foreach标签则设置其BeforeRender事件用于设置变量表达式{$:#.news.url}的值
        tag.BeforeRender += (sender, e) =>
        {
            ForEachTag t = (ForEachTag)sender;
            //取得当前项的值(因为foreach标签的数据源是List<News>集合,所以当前项的值类型为News实体)
            News news = (News)t.Item.Value;
            //设置当前项的变量表达式的值.也即是"{$:#.news.url}"变量表达式
            t.Item.SetExpValue("url", GetNewsUrl(news));
        };
    }
}

在上面代码中使用了BeforeRender事件,此事件是在标签元素的数据呈现之前触发。对于循环元素<vt:foreach>和<vt:for>,因为每次循环时都会呈现数据,也就导致每次循环时都会触发此事件(包括AfterRender事件),所以我们就可通过此事件方法获取到循环当前项的值。

具体的示例代码,请参考:http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/cnblogs_newslist.ashx.cs

上一页  1 2 3 4 5 

Tags:VTemplate 引擎

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接