2017-01-04 44 views
1

在Silverstripe模板中,$ Up標籤暫時脫離當前循環/ with,並允許訪問父範圍。雖然下面的模板代碼有效,但我不明白爲什麼。Silverstripe:「Up」的模板行爲

$ Checked是一個包含我循環的對象的列表,本身包含一個需要顯示第一個項目的$ Items的列表。該對象還有一個所有者,我需要在第一個項目的範圍內訪問它。

我有以下silverstripe模板代碼:

<% loop $Checked %> 
    <% with $Items.First %> 
     <article class="checked-statement"> 
      <span class="statement-outcome h-bg-true-$Verdict.Value">$Verdict.Name</span> 
      <div class="checked-statement__statement"> 
       <a href="xxx" class="checked-statement__picture"><img 
         src="$Up.Up.Owner.Photo.CroppedImage(160,160).Url" alt="$Up.Up.Owner.Name.XML" class="h-full-rounded"/></a> 
       <a href="xxx" class="checked-statement__name">$Up.Up.Owner.Name</a> zei 
       <h3> 
        <a href="yyy" class="checked-statement__statement-text">$Up.Up.Title</a> 
       </h3> 
      </div> 
      <a href="yyy" class="checked-statement__argument"> 
       $Up.Up.Statement&hellip; 
       $Top.Icon('chevron-right') 
      </a> 
     </article> 
    <% end_with %> 
<% end_loop %> 

我想我只需要一個「向上」去的$託運範圍。但我需要兩個,這很奇怪,因爲第一個Up應該突破「with」,第二個應該跳出循環,給我頂層的範圍,其中特定的項目不可用。 。

任何人都可以在我的推理或代碼中指出我的錯嗎?

回答

6

在某些時候,我相信它是3.0或3.1,$ Up後面的邏輯改變了。

以前<% with $Items.First %>或返回2.x <% control $Items.First %>只是一個範圍級別,你可以用$ Up分解。

這些天來,每個對象/方法調用/屬性都得到它自己的範圍。這意味着:

<% with $Foo.Bar %>Foo's ID: $Up.ID<% end_with %> 
<% with $Foo.Bar %>Outside of "with" ID: $Up.Up.ID (== $Top.ID in this case)<% end_with %> 

And for deeper nesting you need even more ups: 
<% with $Foo.Bar.X %><% loop $Y %>$Up.Up.Up.Up.ID == $Top.ID<% end_loop %><% end_with %> 
+0

啊,所以第一個Up我只打破了第一個,最後在Item列表中。第二個然後突破了$ Items。這就說得通了。謝謝! – jberculo