0

在 require.js 和骨干应用程序中使用 youtube player javascript api 时,我有一个关于“this”的问题。youtube iframe_api 正在加载到我不包括在下面的 require.js 模块中。这是我的代码,所有代码都遵循视图的典型主干扩展布局。

    youTubePlayer: function() {
        var player,
            self = this,
            i = 0;

        self.videoArray = [];

        if ($('.slidevideo').length) {
            _.each($('.slidevideo'), function(el, i) {
                var YTid = $(el).data('videoid');

                self.player = new YT.Player('Player-' + YTid, {
                    videoId: YTid,
                    playerVars: {
                        enablejsapi: 1
                    }
                });

                self.videoArray.push(self.player);
            });
        };

        setTimeout(function(){
            _.each(self.videoArray, function(video) {

                video.addEventListener("onStateChange", self.stateChange)

            });

        }, 5000);
    },
    stateChange: function(e){
        console.log(e);
                    console.log(this);
    }

问题是 stateChange 函数中的“this”失去了对主干视图的引用,而是引用了我加载了 youtube API 和 YT 构造函数的全局窗口对象。如何在 Backbone 视图中保持“this”范围?非常感谢您提前。

4

1 回答 1

1

使用_.bind

video.addEventListener("onStateChange", _.bind(self.stateChange, self));
于 2013-06-13T18:16:18.453 回答