Контекст подтеги в DotLiquid (с формами)

Я хотел бы иметь возможность получить доступ к объекту, переданному тегу формы в DotLiquid внутри дочерних тегов. Что-то вроде этого:

{% form '/action' requestObject %}
    {% textinput Name %}
    <button type="submit">Create Request</button>
{% endform %}

Где textinput тег ищет name поле на requestObject а затем помещает значение в поле ввода текста. Моя жидкость довольно ржавая, поэтому, если я все делаю неправильно, я открыт для последовательных криков о том, что я чокнутый и что мне нужно сделать, чтобы стать лучше.

1 ответ

Решение

Это легко сделать в теге рендерера с Context"s Stack:

public class Form : Block
{
    // public override void Initialize...
    public override void Render(Context context, TextWriter writer)
    {
        context.Stack(() =>
        {
            context["form_obj"] = new FormObject();
            result.Write("<form>");
            base.Render(context, result);
            result.Write("</form>");
        }
    }
}

Перед запуском действие передается ему, Stack выдвигает новый стек переменных Hash (который просматривает цепочку для неустановленных переменных), а затем выводит его в конце. Идеально подходит для локализованной области видимости переменных.

Другие вопросы по тегам