【问题标题】:XSL back buttonXSL 后退按钮
【发布时间】:2013-05-09 06:50:39
【问题描述】:

我不是这方面的专家。我做了一些搜索,但没有找到我想要的东西。希望它相当简单。

我正在开发一个具有内置网络服务器的软件控制系统。在这个系统的导航过程中有一些点,唯一的出路是使用网络浏览器的后退按钮(不幸的是,我知道)。

对于使用此功能的操作员,他们通常在屏幕上进行所有导航,突然出现“无路可走”的显示可能会引起混乱。

我想修改layout.xsl 文件以添加后退按钮。 (如果重要的话,它只会是 Internet Explorer,因为该系统基于 ActiveX。)

以下是文件的相关部分:

<table id="Menu" class="Header" border="0" cellspacing="0" cellpadding="0" width="100%">
  <tr>
    <td width="100%">
      <table class="menuBar" border="0" cellspacing="0" cellpadding="0">
        <tr height="0">

          <xsl:for-each select="Links/Link">
            <xsl:if test="text() != 'Lists'">
              <xsl:if test="text() != 'Database'">
                <xsl:if test="text() != 'Favorites'">
                  <xsl:if test="text() != 'Log Off'">
                    <xsl:if test="text() != 'Help'">
                      <xsl:call-template name="Button">
                        <xsl:with-param name="href" select="@href"/>
                        <xsl:with-param name="text" select="text()"/>
                        <xsl:with-param name="last" select="boolean( position() = count( ../Link ) )"/>
                      </xsl:call-template>
                    </xsl:if>
                  </xsl:if>
                </xsl:if>
              </xsl:if>
            </xsl:if>
          </xsl:for-each>

          <th class="rightbar" align="right" valign="top"/>
        </tr>
      </table>
    </td>
  </tr>
</table>

<xsl:template name="Button">
  <xsl:param name="href"/>
  <xsl:param name="text"/>
  <xsl:param name="last"/>

  <th width="auto" height="20" class="deselected" valign="center">
    <xsl:element name="a">
      <xsl:attribute name="href">
        <xsl:value-of select="$href"/>
      </xsl:attribute>
      <xsl:value-of select="$text"/>
    </xsl:element>
  </th>
  <th width="5" class="deselected" valign="middle">
    <img src="/file/images/submenumid.png" width="5" height="20"/>
  </th>
</xsl:template>

您会看到表格多次调用按钮模板。如果您对这些线路感到困惑,

<xsl:if test="text() != 'xxxx'">

这些是我添加的,用于过滤掉我不想显示的现有按钮。

我希望有一个名为back button 的类似模板,它将向 Internet Explorer 发送返回命令。然后我会先调用back button 模板,使其成为最左边的项目。

提前致谢,如果需要任何其他信息,请告诉我!

【问题讨论】:

  • 我应该注意到参数都来自代码示例之外。不过,这对于这个问题真的不重要。
  • 有一个and,即使在 XSLT 1.0 中也是如此。不需要那些嵌套的xsl:if 元素!

标签: javascript html xml xslt xslt-1.0


【解决方案1】:
<xsl:template name="BackButton">
  <xsl:param name="last"/>

  <xsl:call-template name="Button">
    <xsl:with-param name="href" select="javascript:window.history.back()"/>
    <xsl:with-param name="text" select="Go back"/>
    <xsl:with-param name="last" select="$last"/>
  </xsl:call-template>
<xsl:template/>

【讨论】:

    【解决方案2】:
        <table id="Menu" class="Header" border="0" cellspacing="0" cellpadding="0" width="100%">
            <tr>
                <td width="100%">
                    <table class="menuBar" border="0" cellspacing="0" cellpadding="0">
                        <tr height="0">
                            <xsl:call-template name="Button">
                                <xsl:with-param name="href">javascript:history.back()</xsl:with-param>
                                <xsl:with-param name="text">Go Back</xsl:with-param>
                                <xsl:with-param name="last" select="false()"/>
                            </xsl:call-template>
    
                            <xsl:for-each select="Links/Link">
                                <xsl:if test="text() != 'Lists'
                                and text() != 'Database'
                                and text() != 'Favorites'
                                and text() != 'Log Off'
                                and text() != 'Help'">
                                    <xsl:call-template name="Button">
                                        <xsl:with-param name="href" select="@href"/>
                                        <xsl:with-param name="text" select="text()"/>
                                        <xsl:with-param name="last" select="boolean( position() = count( ../Link ) )"/>
                                    </xsl:call-template>
                                </xsl:if>
                            </xsl:for-each>
    
                            <th class="rightbar" align="right" valign="top"/>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    

    这是最终的代码。感谢 Borodins 的建议,我清理了许多“if”语句。 我还使用 history.back() 链接添加了对 Button 模板的新调用,而不是添加新模板。

    感谢大家的帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多