gpt4 book ai didi

polymer - 如何从回调中访问 Polymer 自定义元素

转载 作者:行者123 更新时间:2023-12-01 08:07:23 24 4
gpt4 key购买 nike

我需要访问自定义元素并从点击事件回调中调用它的方法。

<polymer-element name="my-element">
<template>
<style type="text/css" media="screen">
...
</style>
<ul id="my_data"></ul>
</template>

<script>
Polymer('my-element', {
dataSelected: function(selectedText) {
//...
},

setData: function(data) {
for (var i = 0; i < data.length; i++) {
var li = document.createElement('li');
li.addEventListener('click', function(e) {
// how can I call dataSelected() from here?
});
li.innerText = data[i];
this.$.my_data.appendChild(li);
}
}
});
</script>
</polymer-element>

如何从回调中调用自定义元素的 dataSelected() 方法?

最佳答案

您可以使用 bind附上 this任何函数的上下文,所以:

   li.addEventListener('click', function(e) {
this.dataSelected(e.target.innerText);
}.bind(this));

http://jsbin.com/xorex/4/edit

但是您可以通过使用更多 polymer 糖来使事情变得更容易。例如,您可以发布数据并使用观察系统,如下所示:

<polymer-element name="my-element" attributes="data">
...
data: [], // type hint that data is an array
...
dataChanged: function() { // formerly setData

http://jsbin.com/xorex/5/edit

此外,您可以使用内置事件系统代替 addEventListener

<polymer-element name="my-element" attributes="data">
...
<ul id="my_data" on-tap="{{dataTap}}"></ul>
...
dataTap: function(e) { // `tap` supports touch and mouse
if (e.target.localName === 'li') {
this.dataSelected(e.target.textContent);
}
}

http://jsbin.com/xorex/6/edit

但最大的胜利是使用 <template repeat>而不是在 JavaScript 中创建元素。此时,完整的元素可能如下所示:

<polymer-element name="my-element" attributes="data">
<template>

<ul id="my_data">
<template repeat="{{item in data}}">
<li on-tap="{{dataTap}}">{{item}}</li>
</template>
</ul>

</template>
<script>

Polymer('my-element', {
data: [],

dataTap: function(e) {
console.log('dataSelected: ' + e.target.textContent);
}
});

</script>
</polymer-element>

http://jsbin.com/xorex/7/edit

关于polymer - 如何从回调中访问 Polymer 自定义元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24713712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com