2014-07-09 64 views
0

我使用Acceleo 3.0從EMF模型生成一些html代碼。我有以下代碼:Acceleo:在for循環中動態生成HTML網格

<div class="ui-grid" style="text-align:center"> 
    [for (icon : Icon | self.Icons)] 
      <div class="column-a"><button data-icon="[iconName/]"></button></div> 
      <div class="column-b"><button data-icon="[iconName/]"></button></div> 
      <div class="column-c"><button data-icon="[iconName/]"></button></div> 
    [/for] 
</div> 

現在,我想要做的是讓它完全參數化,逐步應用類名的for循環,直到我達到我的模型MaxColumns參數,然後從0開始了。 也就是說,如果我有MaxColumns = 3,我想以下結果:

<div class="ui-grid" style="text-align:center"> 
    <div class="column-a"><button data-icon="icon-1"></button></div> 
    <div class="column-b"><button data-icon="icon-2"></button></div> 
    <div class="column-c"><button data-icon="icon-3"></button></div> 
    <div class="column-a"><button data-icon="icon-4"></button></div> 
    <div class="column-b"><button data-icon="icon-5"></button></div> 
    <div class="column-c"><button data-icon="icon-6"></button></div> 
    <div class="column-a"><button data-icon="icon-7"></button></div> 
    <div class="column-b"><button data-icon="icon-8"></button></div> 
    <div class="column-c"><button data-icon="icon-9"></button></div> 
    ... 
</div> 

在此先感謝。

回答

6

假設你MaxColumn屬性由self onwed(在你所描述的情況下),你可以使用IconssubSequence(start, end)運營商,如果這是參考序列。下面是代碼:

<div class="ui-grid" style="text-align:center"> 
[for (icon : Icon | self.Icons->subSequence(1, self.MaxAttribute))] 
     <div class="column-a"><button data-icon="[iconName/]"></button></div> 
     <div class="column-b"><button data-icon="[iconName/]"></button></div> 
     <div class="column-c"><button data-icon="[iconName/]"></button></div> 
[/for] 

如果引用不是一個序列(但有序的,所以一個OrderedSet):

<div class="ui-grid" style="text-align:center"> 
[for (icon : Icon | self.Icons->asSequence()->subSequence(1, self.MaxAttribute))] 
     <div class="column-a"><button data-icon="[iconName/]"></button></div> 
     <div class="column-b"><button data-icon="[iconName/]"></button></div> 
     <div class="column-c"><button data-icon="[iconName/]"></button></div> 
[/for] 

但是,請記住,如果您的文獻。沒有排序,Acceleo可以按照不同的順序收集每個執行的集合元素。使用asSequence()不會改變任何內容。

此外,小心,收集第一個索引,