javascript - polymer - 该对象在功能中不可用

标签 javascript polymer polymer-1.0

使用 polymer 1.0。我需要setTimout因为 <template is="dom-if" if="{{foo.bar}}"> 存在竞争条件和<google-youtube>当我运行 this.$$('google-youtube'); 时可用。为了保持代码整洁,我喜欢 startPlayer玩家被抽出。但是this对象不可用于 setTimeout(this.startPlayer, 1000);调用它。我怎样才能解决这个问题?由于这些函数是 Object.create() 的属性不知道怎么办。

<script>
    Polymer({
      is: "video-player",
      behaviors: [ 
        Polymer.PaperDialogBehavior,
        Polymer.NeonAnimationRunnerBehavior
                 ],
      properties: {
        foo: Object,
        entryAnimation: {
          value: 'scale-up-animation'
        }
      },
      listeners: { 'iron-overlay-opened': 'enableElement',
                   'iron-overlay-closed': 'stopPlayer'
      },
      startPlayer: function() {
        youtubePlayer = this.$$('google-youtube');
        if (youtubePlayer.playbackstarted) {
         youtubePlayer.play();
        }
      },
      enableElement: function(e) {
        //this.playAnimation();
        this.foo = { bar: true};
        setTimeout(this.startPlayer, 1000);
      },
      stopPlayer: function(e) {
        youtubePlayer = this.$$('google-youtube');
        youtubePlayer.pause();
        youtubePlayer.seekTo(5);
      }
    });
  </script>

最佳答案

替换这个:

setTimeout(this.startPlayer, 1000);

...这样:

setTimeout(this.startPlayer.bind(this), 1000);

如果您不熟悉 .bind() 的工作原理,请参阅 MDN docs 的快速说明。 :

The bind() method creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function is called.

请注意 .bind() 在 <=IE8 中不可用,但它很容易polyfill 。如果您不喜欢填充(并且需要 IE8 中的支持),您也可以用以下代码替换该行代码:

var self = this;
setTimeout(function() {
    self.startPlayer();
}, 1000);

关于javascript - polymer - 该对象在功能中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31622663/

相关文章:

javascript - 为什么我会在 gulp 中得到 "task completion callback called too many times"?

javascript - jQuery 获取段落内的数字,但不获取类中的数字

css - 如何仅当标题为 "revealed" polymer 时才具有背景颜色

javascript - Iron-List 多重选择将项目多次添加到选择中

javascript - Polymer v 1.0 .. 在带注释的事件处理程序中传递值

javascript - 正则表达式查找字符串上的最后一个标记

javascript - 如何使用具有多个值的单个 KEY 过滤数组?

javascript - polymer 1.x : Pre-loading element attributes

php - 我怎样才能停止 php while 循环一遍又一遍?

polymer - Polymer 1.0 中的核心动画页面