link in paper-item: 避免捕获点击
link in paper-item: avoid capturing tap
我使用 app-location
显示基于 url 的一组页面中的一个,我还有一个包含 paper-item
列表的 paper-listbox
,显示可用页面的列表。每个 paper-item
里面都有一个 link 可以转到那个页面。如果正常点击link,则请求被app-location
拦截,页面直接显示,无需重新加载。如果 link 是 Ctrl+clicked 或 middle clicked 或其他什么,它会在新选项卡中打开页面,就像正常的 links 一样。
我的问题 - 如何使列表框中的选择与显示的页面保持同步?我已经尝试了所有我能想到的方法,但没有任何效果。
没有任何额外的逻辑,link 可以工作,但是单击 paper-item
会选中它,即使显示的页面没有改变。我尝试在列表框的 selected
属性上添加一个观察者,并根据需要更新 url 。这主要适用于一个例外 - Ctrl + 单击 link 在新选项卡中打开仍然会导致 paper-item
被选中,因此现有选项卡也会发生变化。
我还尝试将整个 paper-item
包裹在 link 中,但这根本没有帮助。
有什么办法可以解决吗?似乎唯一的解决方案是找到一种方法来阻止 paper-item
在 child link 上捕获点击事件。但是如果不修改 Polymer 源代码本身,我找不到任何方法来做到这一点,这是不可能的。
我想出了一个例子,它使用 iron-selector 和一些 css 来展示如何做到这一点。然后神奇的是在你的锚元素上有一个事件,它检查是否按下了 ctrl,如果是,它会阻止事件向下传播,这会阻止关注项目。
_onClick: function(e) {
if (e.ctrlKey) {
console.log('stop propagation');
e.stopPropagation();
}
}
请注意,当 right-clicking 并选择从 link 打开一个新标签时,这也适用,因为焦点不会传递到项目。
此外,我知道这不使用 paper-item 组件。我试过同样的方法,但没有用,它似乎总是能抓住焦点。
我使用 app-location
显示基于 url 的一组页面中的一个,我还有一个包含 paper-item
列表的 paper-listbox
,显示可用页面的列表。每个 paper-item
里面都有一个 link 可以转到那个页面。如果正常点击link,则请求被app-location
拦截,页面直接显示,无需重新加载。如果 link 是 Ctrl+clicked 或 middle clicked 或其他什么,它会在新选项卡中打开页面,就像正常的 links 一样。
我的问题 - 如何使列表框中的选择与显示的页面保持同步?我已经尝试了所有我能想到的方法,但没有任何效果。
没有任何额外的逻辑,link 可以工作,但是单击 paper-item
会选中它,即使显示的页面没有改变。我尝试在列表框的 selected
属性上添加一个观察者,并根据需要更新 url 。这主要适用于一个例外 - Ctrl + 单击 link 在新选项卡中打开仍然会导致 paper-item
被选中,因此现有选项卡也会发生变化。
我还尝试将整个 paper-item
包裹在 link 中,但这根本没有帮助。
有什么办法可以解决吗?似乎唯一的解决方案是找到一种方法来阻止 paper-item
在 child link 上捕获点击事件。但是如果不修改 Polymer 源代码本身,我找不到任何方法来做到这一点,这是不可能的。
我想出了一个例子,它使用 iron-selector 和一些 css 来展示如何做到这一点。然后神奇的是在你的锚元素上有一个事件,它检查是否按下了 ctrl,如果是,它会阻止事件向下传播,这会阻止关注项目。
_onClick: function(e) {
if (e.ctrlKey) {
console.log('stop propagation');
e.stopPropagation();
}
}
请注意,当 right-clicking 并选择从 link 打开一个新标签时,这也适用,因为焦点不会传递到项目。
此外,我知道这不使用 paper-item 组件。我试过同样的方法,但没有用,它似乎总是能抓住焦点。