我可以通过让按钮成为paper-radio-group
的直接子级来关联组中的多个paper-radio-button
。
<paper-radio-group selected="{{someProperty}}">
<paper-radio-button name="foo">Foo</paper-radio-button>
<paper-radio-button name="bar">Bar</paper-radio-button>
<paper-radio-button name="baz">Baz</paper-radio-button>
</paper-radio-group>
但是,如果我像这样用div 包装其中一个paper-radio-button
,它就会失去与组的关联(因此可以选择该包装按钮和其他按钮之一(。这是一个问题,因为我想给那个按钮一个工具提示。
<paper-radio-group selected="{{someProperty}}">
<paper-radio-button name="foo">Foo</paper-radio-button>
<paper-radio-button name="bar">Bar</paper-radio-button>
<div>
<paper-radio-button name="baz">Baz</paper-radio-button>
<paper-tooltip>Tooltip text for baz.</paper-tooltip>
</div>
</paper-radio-group>
我尝试使用纸质工具提示的 for
属性,但这并不能使工具提示仅在将鼠标悬停在该特定按钮上时才显示。
如何在不让按钮成为直接子项的情况下将paper-radio-button
与paper-radio-group
相关联?
添加工具提示 为每个需要工具提示的单选按钮创建一个id
。然后,您可以使用for
并参考id
。不需要包装div
.
<paper-radio-group>
<paper-radio-button id="foo" name="foo">Foo</paper-radio-button>
<paper-tooltip for="foo">Tooltip text for foo.</paper-tooltip>
<paper-radio-button id="bar" name="bar">Bar</paper-radio-button>
<paper-tooltip for="bar">Tooltip text for bar.</paper-tooltip>
<paper-radio-button id="baz" name="baz">Baz</paper-radio-button>
<paper-tooltip for="baz">Tooltip text for baz.</paper-tooltip>
</paper-radio-group>
您可以在此 plunk 中找到一个工作演示。
在paper-radio-group
中使用div
有两个问题
-
Paper-radio-group
期望可选元素是paper-radio-button
。这是一个简单的问题,因为radio-group has a property named
可选",您可以覆盖它以更改此行为。 - 第二个也是更复杂的问题是,
paper-radio-group
在选择为可选择的元素上切换 checked 属性。我能够为此找到的一种解决方案是忽略选中的paper-radio-group
设置,并在所有div 上添加一个点击侦听器以手动切换radio-button
。
话虽如此,此解决方案仍将适用于radio-group
的所有直接子级,它们是同一 HTML 元素的不同实例。
<link rel="import" href="https://polygit.org/components/polymer/polymer.html">
<link rel="import" href="https://polygit.org/components/paper-radio-group/paper-radio-group.html">
<link rel="import" href="https://polygit.org/components/paper-radio-button/paper-radio-button.html">
<dom-module id="group-with-div">
<template>
<style></style>
<paper-radio-group selectable="div">
<div name="one" data-selected="1" on-tap="changeSelection">
<paper-radio-button id="1">one</paper-radio-button>
</div>
<div name="two" data-selected="2" on-tap="changeSelection">
<paper-radio-button id="2">two</paper-radio-button>
</div>
<div name="three" data-selected="3" on-tap="changeSelection">
<paper-radio-button id="3">three</paper-radio-button>
</div>
</paper-radio-group>
</template>
</dom-module>
<script>
Polymer({
is: 'group-with-div',
properties: {
},
changeSelection: function(e) {
for (var i = 1; i <= 3; i++) { //i should be less than number of radio buttons (this code is mainly added to handle dynamically created buttons)
if (e.currentTarget.attributes['data-selected'].value == i) {
this.$[i].set('checked', true);
} else {
this.$[i].set('checked', false);
}
}
}
})
</script>
<group-with-div></group-with-div>