زسلت:تمرير متغير في قالب عند استخدام تطبيق قوالب
-
21-12-2019 - |
سؤال
لست متأكدا مما إذا كان هذا يسأل الكثير من زسلت ، ولكن أنا بعد شيء مماثل لكيفية mode
يعمل ، باستثناء مثالي داخل قالب واحد ، بدلا من الاضطرار إلى تكراره كما أنا الآن:
<!-- Start -->
<xsl:apply-templates select="airports/airport" mode="start" />
<!-- End -->
<xsl:apply-templates select="airports/airport" mode="end" />
<!-- Template -->
<xsl:template match="airports/airport" mode="start">
<option value="{@iata}" data-alternative-spellings="{.},{@iata}">
<xsl:if test="@iata = 'LGW'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="@iata"/> - <xsl:value-of select="."/>
</option>
</xsl:template>
<xsl:template match="airports/airport" mode="end">
<option value="{@iata}" data-alternative-spellings="{.},{@iata}">
<xsl:if test="@iata = 'LAX'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="@iata"/> - <xsl:value-of select="."/>
</option>
</xsl:template>
القالب ينطبق على selected
السمة إذا كانت القيمة شيء محدد.يجب أن تكون هذه القيمة مختلفة اعتمادا على ما يسمى القالب.هناك حالتان, start
و end
أن كلاهما له معايير مختلفة.
أسهل طريقة لشرح ما أحاول القيام به هو بالنسبة لي لكتابة ذلك بلغة أخرى :)
<!-- Start -->
getAirports(start);
<!-- End -->
getAirports(end);
<!-- Template -->
var getAirports = function(position)
{
var selected = '';
switch(position)
{
case 'start':
if(iata == 'LGW')
{
var selected = 'selected="selected"';
}
break;
case 'end':
if(iata == 'LAX')
{
var selected = 'selected="selected"';
}
break;
default:
break;
}
return '<option value="'+iata+'" data-alternative-spellings="'+iata+','+name+'" '+selected+'>'+iata+' - '+name+'</option>';
}
هل هذا ممكن في زسلت ، أو سوف تضطر إلى التمسك تكرار القالب واستخدام mode
?
شكراً!
المحلول
أعطاني مستخدم تويتر زميل لي الحل ، والتي يمكن العثور عليها في هذا جوهر.
ما احتاجه هو with-param
, ، شيء لم أستخدمه من قبل:
<!-- Start -->
<xsl:apply-templates select="airports/airport">
<xsl:with-param name="position" select="'start'" />
</xsl:apply-templates>
<!-- End -->
<xsl:apply-templates select="airports/airport">
<xsl:with-param name="position" select="'end'" />
</xsl:apply-templates>
<xsl:template match="airports/airport">
<xsl:param name="position" />
<option value="{@iata}" data-alternative-spellings="{.},{@iata}">
<xsl:if test="(@iata = 'LGW' and $position = 'start') or (@iata = 'LAX' and $position = 'end')">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="@iata"/> - <xsl:value-of select="." />
</option>
</xsl:template>
لا تنتمي إلى StackOverflow