在DotLiquid中访问自己标记中的当前范围

时间:2012-10-05 04:39:50

标签: c# dotliquid

当我在我的DotLiquid模板中循环IEnumerable时

{% for block in Blocks -%}

    // this works
    {{ block.Structure }}

    // this doesn't
    {% RenderObject block.Structure %}

{% endfor -%} 

我可以通过block.Structure直接呈现成员,但我不知道如何在我自己的标记类RenderObject中访问此Structure对象:

public class RenderObject : Tag
{
    private string _tagName;
    private string _markup;

    public override void Initialize(string tagName, string markup, List<string> tokens)
    {
        _tagName = tagName;
        _markup = markup.Trim();
        base.Initialize(tagName, markup, tokens);
    }

    public override void Render(Context context, TextWriter result)
    {
        // HERE COMES THE QUESTION
        // How to access the block.Structure object here?
        var structure = ?

1 个答案:

答案 0 :(得分:3)

您可以使用传递到context方法的RenderObject.Render对象。 Context上有一个索引器可以将变量名称解析为变量。 (并且For标记将循环变量(即示例中的block)放入context。)

剩下的问题是获取变量名称(“block.Structure”)。幸运的是,这正是传递给markup的{​​{1}}变量的用途。

所以这应该有效:

RenderObject.Initialize