【问题标题】:Link in paper-item inside paper-menu-button (Polymer-1.0)链接纸张菜单按钮内的纸张项目(Polymer-1.0)
【发布时间】:2015-08-28 12:21:37
【问题描述】:

更新 1:发现 this issue with pull request 似乎正在解决 Polymer 中的这个问题。

更新 2:决定基于 Polymer Starter Kit 重构我的布局,它使用 page.js 而不是 app-router,并且似乎运行良好,尽管他们不使用 paper-item在纸质菜单中,而是使用自定义锚元素。

搜索所有文档,但我找不到这个(尽管 another issue on stackoverflow 的标题几乎相同,但不是同一件事)

TLDR:我需要整个文件项都可以点击链接。不仅仅是文字本身。为清楚起见,请参见下图,这里是live code

.

我有类似下面的代码。我将链接标签与应用路由器路由结合使用,效果很好。唯一的问题是:我希望整个纸质菜单项都可以使用链接标签进行点击。

当我使用下面的代码时,直接单击链接 tekst 本身时会检索到正确的页面,但这不会创建“选定”状态。当我点击按钮(就在文本之外)时,按钮被选中,但页面没有被检索到,因为我没有点击链接......

一定有一种简单的方法可以做到这一点,对吧?我的意思是,我可以通过覆盖所有 CSS 来强制执行此操作,但在我看来,纸质菜单中的纸质项目中的链接将是一件非常常见的事情,应该自动执行此操作或使用属性或某些东西?

<paper-menu class="list">
  <paper-item icon="home" label="Home" ><a is="pushstate-anchor" href="/">Home</a></paper-item>
  <paper-item icon="polymer" label="Demo"><a is="pushstate-anchor" href="/demo">Demo</a></paper-item>
</paper-menu>

我检查了有关纸质项目、纸质菜单和其他文件的文档,但这些文档从不使用带有链接的示例。

【问题讨论】:

  • 您好,我认为如果您创建一个我们可以玩的在线示例会很有帮助。
  • 为什么不直接将&lt;paper-item&gt; 元素包装在&lt;a&gt; 标签中,而不是反过来?
  • @idleherb 好主意 ;) 我已将网址添加到说明中。
  • @VartanSimonian 看起来很丑。该项目是包装器,链接应该是可选的。
  • @AlbertSkibinski,按照@vartan-simonian 的建议做,并将其包装在&lt;a&gt; 标签中。这甚至是文档中建议的方法:elements.polymer-project.org/elements/paper-item 要将纸张项目用作链接,请将其包装在锚标记中。由于 paper-item 已经获得焦点,您可能希望通过将其 tabindex 设置为 -1 来防止锚标记获得焦点。

标签: polymer polymer-1.0


【解决方案1】:

IMO,最干净的方法是完全删除链接并添加点击事件。

(您也可以在菜单中使用 dom-repeat

<paper-menu class="list">
  <paper-item icon="home" label="Home" on-tap="menuSelected" mypath="/">Home</paper-item>
  <paper-item icon="polymer" label="Demo" on-tap="menuSelected" mypath="/demo">Demo</paper-item>
</paper-menu>

我假设您正在使用 &lt;a&gt; 标签,因为 app-router

来自应用路由器文档:

go(path, options) - 您可以从 Javascript 调用路由器以命令式导航。

然后您可以简单地编写自己的 on-tab 处理程序并在每个 &lt;paper-item&gt; 上使用自定义属性 (mypath)

Polymer({
    is: 'your-menu',
    menuSelected: function (e) {
        var mypath = e.currentTarget.getAttribute('mypath'); 
        document.querySelector('app-router').go(mypath);
    },
})();

【讨论】:

  • 是的,这是可能的,但这不会对 SEO 产生负面影响吗?
  • 对我来说,将最新的 sitemap.xml 添加到您的站点路由是任何 JavaScript 站点的最佳方式,无论是否使用链接,这将允许任何搜索引擎导航您的地点。那些执行 JavaScript 的大型搜索引擎不会有任何问题,而那些不执行 JavaScript 的搜索引擎可能不会呈现任何聚合物材料。然后是 CEO 优化的丑陋方式 - 只需添加带有 display:none 的链接,这不会干扰您的 UI,并将作为搜索引擎的正常链接。但是,是的,这是一个很好的观点。
  • 所以,是的,您的回答是正确的,但我仍然想知道这是否也是聚合物纸质项目链接的最佳实践。也许这很明显,但我在文档中找不到任何关于它的信息。你认为他们认为每个人都在使用 JS,还是应该将这种当前行为视为错误?
  • 不确定,我还在学习聚合物 :) 如果 pushstate-anchor 允许 is="pushstate-anchor" 到 标签以外的其他标签。 (github.com/erikringsmuth/pushstate-anchor/blob/master/src/…) 他们对它进行了硬编码。然后你可以不使用任何 JS(只需将属性直接添加到 paper-item 元素),但我仍然看不到 对 CEO 友好。
  • 更新了我的原始帖子,其中包含指向纸质项目问题队列中问题的链接,我认为该问题解决了这个问题。
【解决方案2】:

class="flex" 添加到每个锚标记。

【讨论】:

  • 添加这个类并不能解决问题:它只会使链接的可点击区域变大,但不会设置活动状态。
  • 它对我有用,尽管这些项目仍然包含一些填充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多