2017-03-28 14 views
0

Imは、以下しようとして含みを持つテンプレート取得:いくつかのファイルでcustom_item.ftlFreemarkerの:(接頭辞)

<root> 
    <name>${name}</name> 
</root> 

MainTemplate.ftl

<root> 
    <#List items as item> 
    <#include "custom_item.ftl"> [Option 1] 
    </#List> 
    <#include "custom_item.ftl"> [Option 2] 
</root> 

をincludeは[Option 1]、他は[Option 2]のようになります。

- Option 1: ${item.name} 
- Option 2: ${name} 

完全に理解するだけでなく、私の問題:$ {名前}私は2種類の方法を使用する必要が変数にアクセスするには 。どうすればそれが常に機能するか確認できますか?インクルードに接頭辞を指定すると、常に同じになります。その後、いつもうまくいく

MainTemplate.ftl

<root> 
    <#List items as item> 
    <#include "custom_item.ftl" prefix='item'> [Option 1] 
    </#List> 
    <#include "custom_item.ftl"> [Option 2] 
</root> 

custom_item.ftl

<root> 
    <# assign prefix = prefix?root> 
    <name>${prefix.name}</name> 
</root> 

:のようなたとえば

。私のアプローチは明らかにうまくいきません。誰かが解決策を持っていますか?

編集:回答

MainTemplate.ftl

<root> 
    <#List listItems as listItem> 
    <#assign item = listItem> 
    <#include "custom_item.ftl"> 
    </#List> 
    <#assign item = .data_model> 
    <#include "custom_item.ftl">  
</root> 

custom_item.ftl

<root> 
    <name>${item.name}</name> 
</root> 

答えて

1
を含ま

常に${item.name}を使用してください。データモデルのルート自体がアイテム(それは?)である場合は、#includeの前に<#assign item = .data_model>のような何かを行うことができます。

関連する問題