javascript - Polymer自定义元素的自定义事件被处理多次

标签 javascript polymer web-component polymer-1.0

我正在使用 Polymer v1.0 和 webcomponents-lite.js v0.7.11。我创建了相对于滚动方向属性垂直或水平滚动图像的自定义元素。我的问题是,当我尝试向索引页面添加几个元素时,最后一个元素加载图像并起作用。以前的元素不起作用。另外,我正在自定义元素的 Polymer 就绪函数中监听自定义事件,但只有最近添加的自定义元素的自定义事件被处理多次(创建了多少个自定义元素)。

(function () {
var element;
var imgData;
Polymer {
    is: 'image-scroller',
    properties{
        id: '',
        scrollDirection: '',
        imgJsonSrc: ''
    },

    ready: function () {
        element = this.querySelector("#imgContainer");

        $(element).on("ImageChanged",function (e){
            self.setScroller();
        });

        self.loadImagePathFromJSON(this.imgJSONSrc);

    },

    setScroller: function (){
        //Creates a custom scrollbar 
        var scrollViewHeight = this.querySelector("#scrollView").clientHeight;
        totalImageCount = imgData.images.length;
        scrollerHeight = parseFloat((scrollViewHeight / totalImageCount).toFixed(2));
        this.querySelector("#scroller").style.height = scrollerHeight+"px";
    },

    loadImagePathFromJSON: function(jsonSrc) {
        //Reads image paths from json file and creates an imgData object

        return imgData;
    },

    showImages: function(data){
        //Show images in div
    },
});
})();

最佳答案

您在 Polymer() 范围之外定义的 elementimgData 变量将为元素的所有实例共享。因此,每当您调用 element = this.querySelector("#imgContainer"); 时,此变量都会被覆盖,并且仅使用最新的引用,这就是为什么只有最后一个元素有效。

您必须在元素内部使用 this.elementthis.imgData 以将它们绑定(bind)到元素实例。

关于javascript - Polymer自定义元素的自定义事件被处理多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32227845/

相关文章:

javascript - jquery 使用自定义属性更改 li 内的值

javascript - "content_scripts"无法在 Chrome v38+ 中工作?

javascript - 使用 Tampermonkey 关闭延迟弹出窗口(实际上是 "pop-over"模型对话框)

html - 大屏幕上的 polymer 隐藏抽屉

javascript - 纸张下拉菜单/纸张列表框 : how to get the value in the request

angular - 在同一 Angular 项目中使用 Angular 元素

html - Web 组件的自定义 HTML 代码段

javascript - jQuery - setInterval 与 $.each

javascript - 使 "null"不渲染的简单方法是什么?

css - 在开槽元素中设置后代元素的样式