2010-03-25 2 views
0

Я начинаю использовать StringTemplate в первый раз, и я застрял, пытаясь выяснить, как получить StringTemplate сделать что-то вроде следующего:StringTemplate переменной со свойствами объекта

article.st

$elemenets:article/elements()$ 

статьи/elements.st

$if($it.is_type)$ $it:article/type()$ 
$elseif($it.is_type2)$ $it:article/type2()$ 
// also tried: $it.value:article/type2()$, same result 
$endif$ 

статьи/type.st

<type>$it.value$</type> 

статьи/type2.st

<h1>$it.value.title</h1> 
<type2>$it.value.text</type2> 

Program.cs

StringTemplateGroup group = new StringTemplateGroup("article", "Templates"); 
StringTemplate template = group.GetInstanceOf("Article"); 
template.SetAttribute("elements", new Element() { is_type = true, value = "<p>Hello Text</p>" }); 
template.SetAttribute("elements", new Element() { is_type2 = true, value = new { title = "Type 2 Title", text = "Type2 Text" } }); 
return template.ToString(); 

Проблема здесь есть ... если (it.is_type) работает отлично, а статья/type.st работает отлично , Однако, когда я передать объект свойству значения для «Element» Я получаю эту ошибку:

Class ClassName has no such attribute: text in template context [Article article/element elseif(it.is_type2)_subtemplate article/type2] 

Итак - мой вопрос, как я получить доступ к свойствам/поля объекта, внутри объекта, используя StringTemplate ?

ответ

1

Представляется, что StringTemplate не поддерживает:

public string name { get; set; } 

Когда я преобразовал это:

public string name; 

Он работал просто отлично ... так что теперь мои элементы могут быть вложенными до конца.

+0

точно, что печально, хотя :( –

Смежные вопросы