在 Polymer 1.0 中使用带有纸按钮的事件无法访问数据属性
Data attribute not accessible using in event with paper-button in Polymer 1.0
我发布这个是因为 中发布的答案对我不起作用。我想将额外的数据参数从纸质按钮(在 dom-repeat 中)传递给 on-tap 事件处理程序。使用以下代码片段的结果提供了一个没有数据的 sub paper-material 元素。
使用:
<template is="dom-repeat" items="{{someParam}}>
<paper-button on-tap="_handleTap" data-args="{{item}}">...</paper-button>
</template>
并处理:
var args = e.target.getAttribute('data-args').split(',');
或
e.target.dataset.args
两者都return<paper-material ...>...</paper-material>
这是怎么回事?为什么目标 return 点按的纸张按钮或其中的数据?!
经过一番修改后,发现目标上的 dataHost 属性 指向原始点击的元素。不知道为什么没有记录。它可能不可靠,但对我有用。
event.target.dataHost.args
更新:
上面的根本行不通
呃。还在偷懒。
更新:
结果你必须对数据属性进行驼峰式大小写。
event.target.dataHost.dataArgs
超级复杂和隐藏:-/
从模板实例访问数据的最有效方法是执行以下操作:
<template is="dom-repeat" items="[[someParam]]">
<paper-button on-tap="_handleTap">...</paper-button>
</template>
...
_handleTap: function(e) {
var model = e.model.item;
// Do something
}
要绑定到像 data-* 这样的本机属性,您必须使用属性绑定 ($=
)。至于事件重定向,您必须使用 Polymer.dom(event).localTarget
才能到达发出该事件的正确目标,在这种情况下,您的纸张按钮(rootTarget
也会 return 纸张-material).
这是我制作的一个工作示例。 http://jsbin.com/fehene/edit?html,output
我发布这个是因为
使用:
<template is="dom-repeat" items="{{someParam}}>
<paper-button on-tap="_handleTap" data-args="{{item}}">...</paper-button>
</template>
并处理:
var args = e.target.getAttribute('data-args').split(',');
或
e.target.dataset.args
两者都return<paper-material ...>...</paper-material>
这是怎么回事?为什么目标 return 点按的纸张按钮或其中的数据?!
经过一番修改后,发现目标上的 dataHost 属性 指向原始点击的元素。不知道为什么没有记录。它可能不可靠,但对我有用。
event.target.dataHost.args
更新: 上面的根本行不通
呃。还在偷懒。
更新: 结果你必须对数据属性进行驼峰式大小写。
event.target.dataHost.dataArgs
超级复杂和隐藏:-/
从模板实例访问数据的最有效方法是执行以下操作:
<template is="dom-repeat" items="[[someParam]]">
<paper-button on-tap="_handleTap">...</paper-button>
</template>
...
_handleTap: function(e) {
var model = e.model.item;
// Do something
}
要绑定到像 data-* 这样的本机属性,您必须使用属性绑定 ($=
)。至于事件重定向,您必须使用 Polymer.dom(event).localTarget
才能到达发出该事件的正确目标,在这种情况下,您的纸张按钮(rootTarget
也会 return 纸张-material).
这是我制作的一个工作示例。 http://jsbin.com/fehene/edit?html,output