斑马条纹内置到stringtemplate?

时间:2009-03-31 19:41:43

标签: c# stringtemplate

在这个例子中,我在传入模板之前使用代码进行条带化,我只是想确保我没有遗漏一些已经内置的stringtemplate功能。

using System;
using System.Linq;
using Antlr.StringTemplate;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Tests
{
    [TestClass]
    public class RandomTests
    {
        [TestMethod]
        public void has_a_table()
        {
            var users = new[] {
                new { LastName = "Doe", FirstName = "John", Age = 30 },
                new { LastName = "Smith", FirstName = "Bob", Age = 28 }
            };

            var columns = new[] {
                new { Template = "$it.LastName$", Head = "Last Name" },
                new { Template = "$it.FirstName$", Head = "First Name" }
            };

            var tableTemplate = @"
<table>
    <thead>
        <tr>
            <th scope=""col"">Index</th>
            $columns: { column |<th scope=""col"">$colum n.Head$</th>}$
        </tr>
    </thead>
    <tbody>
        $items:{ item |<tr$if(item.Stripe)$ class=""alt""$endif$><td>$i$</td>$item.Item:row()$</tr>}$
    </tbody>
</table>
";
            var rowTemplate = string.Join
            (
                "",
                (from column in columns
                 select
                    "<td>" + column.Template + "</td>"
                ).ToArray()
            );

            var templates = new StringTemplateGroup("table-templator");

            templates.DefineTemplate("table", tableTemplate);
            templates.DefineTemplate("row", rowTemplate);

            var template = templates.GetInstanceOf("table");

            var items = users
                .Select((item, index) => new { Stripe = index % 2 == 0, Item = item })
                .ToArray();

            template.SetAttribute("columns", columns);
            template.SetAttribute("items", items);

            var actual = template.ToString();

            Assert.IsNotNull(actual);
        }

2 个答案:

答案 0 :(得分:3)

我不是StringTemplate的专家,但我found a thread on the mailing list似乎提供了一个比现在更简单的解决方案。

答案 1 :(得分:0)

有一个很好的帖子,也许你可以找到最简单的解决方案:

Localizable text template engine using StringTemplate 4