0

私は初めて StringTemplate を使い始めましたが、StringTemplate を次のようにする方法を見つけようとして立ち往生しています。

記事.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$

記事/タイプ.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();

ここでの問題は... if(it.is_type) が正常に動作し、article/type.st が完全に動作することです。ただし、「要素」の値プロパティにオブジェクトを渡すと、次のエラーが発生します。

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

だから - 私の質問は、StringTemplate を使用してオブジェクト内でオブジェクトのプロパティ/フィールドにアクセスするにはどうすればよいですか?

4

1 に答える 1

1

StringTemplate がサポートしていないようです:

public string name { get; set; }

これを次のように変換すると:

public string name;

それはうまくいきました...だから今、私の要素は入れ子にすることができます。

于 2010-03-26T18:54:41.260 に答える