0

我被困住了。我想要做的是为我的单元格中的属性分配一个数字。我通过调用模板并将参数传递给我调用的模板来做到这一点。

 <xsl:call-template name="RowIdInitializer" >
    <xsl:with-param name="i">1</xsl:with-param>        
  </xsl:call-template>

然后我使用该参数并将其作为参数传递给应用模板

<xsl:template name="RowIdInitializer">
<xsl:param name="i" />   
   <xsl:apply-templates select="Data" mode="table" >
    <xsl:with-param name="iThis" select="$i"/>             
  </xsl:apply-templates>

<xsl:if test="@Exsist">
  <xsl:call-template name="RowIdInitializer">
    <xsl:with-param name="i" select="$i + 1">         
    </xsl:with-param>        
  </xsl:call-template>
</xsl:if>
</xsl:template>

请注意,然后我从自身内部调用模板(递归),并将参数的递增值传递给模板,就像我调用自身一样。试图模仿一个 for 循环,其中每个数据模式都拥有一个属性 Exist (这可能是以后的问题,因为对 RowIdInitializer 的第一次调用是从一个级别向上调用的,它可能在 Row 节点中查找 Exist 属性,

<xsl:template match="Row">
   ..... some other stuff     
  <xsl:call-template name="RowIdInitializer" >
    <xsl:with-param name="i">1</xsl:with-param>        
  </xsl:call-template>
</xsl:template>

但这不仅仅是指出的问题)。传递给应用模板的参数是分配给属性数据滑动页面的位置。

<xsl:template select="Data" mode="table" >
 <xsl:param name="iThis" />  
<td class="dataTableCell" onblur="cellEvent(event)" data-SwipePage ="$iThis">     
 ..otherstuff...
</td>   

这就是问题所在。该值没有被传递,并且字符串文字被分配为值。这样,当我在浏览器的开发控制台中检查 HTML 时,我会得到一个属性,该属性表示data-SwipePage ="$iThis"为每个作为行子节点的数据节点创建的所有 td 元素。我也试过传入一个像这样的第一名

<xsl:apply-templates select="Data" mode="table" >
    <xsl:with-param name="iThis" select="1"/>             
  </xsl:apply-templates>

<xsl:apply-templates select="Data" mode="table" >
    <xsl:with-param name="iThis">1 </xsl:with-pam>             
  </xsl:apply-templates>

我也尝试使用破坏所有 <xsl:with-param这样的参数

 <xsl:with-param name="iThis">
      <xsl:value-of select="$i"/>
    </xsl:with-param>

并且仍在使用文字字符串值。

4

1 回答 1

1

在没有完全评估您的代码的情况下,上面有一个明显的 boo boo,您需要将变量 $iThis 用 { 和 } 括起来,例如:

<xsl:template select="Data" mode="table" >
 <xsl:param name="iThis" />  
<td class="dataTableCell" onblur="cellEvent(event)" data-SwipePage ="{$iThis}">     
 ..otherstuff...
</td>  
于 2013-10-09T22:13:48.940 回答