如何从另一个上下文调用的方法中引用小部件属性



我的jquery ui小部件有一些属性需要在回调时访问。问题是上下文是暂时的。

我读到的所有内容都说要在_create构造函数中创建我的变量,并在that:中保留对小部件的引用

(function ($) {
$.widget("tsp.videoWrapper", {
options: {
value: 0,
playBtnObj: null,
timeboxElement: null,
chapterNavElement: null,
segmentBarElement: null,
positionViewElement : null
},
_create: function () {
var that = this;
var thatElm = $(that.element);
that.Video = thatElm.children("video")[0];
if (that.Video == null) {
console.log("Video element not found.");
return;
}
that._addHandlers();             
},
_addHandlers: function () {
this.Video.addEventListener("loadedmetadata", this._videoInited, false);
if (this.Video.readyState >= this.Video.HAVE_METADATA) {
this._videoInited.apply(this.Video); // missed the event
}
},
_videoInited: function (evt) {
console.log(this);
console.log(this.Video.textTracks[0]);
});
}(jQuery));

尝试在_videoInit中引用that会产生错误:

使用隐式定义的全局变量

但是:

console.log(this);

_videoInit中是指视频本身,因此调用

console.log(this.Video.textTracks[0]);

失败,因为video没有Video属性。为了简单起见,我省略了一堆其他代码,但在这次调用之后,我实际上需要一个对小部件的引用,以使用加载到视频中的提示来做一些事情,所以只需要这样做:

console.log(this.textTracks[0]);

不是一个选项。

如何访问上下文以获取视频,然后使用小部件实例的属性对其进行处理?

例如,我该怎么做?

_videoInited: function (evt) {
// pretend up in _create I had: that.Cues=[]
that.Cues = that.Video.textTracks[0].cues;
});

由于如上所述的隐式错误,我不能使用that,并且由于this是视频元素引用而不是videoWrapper窗口小部件引用,所以我不能使用this。我做不到:

that.Cues = that.Video.textTracks[0].cues;

在CCD_ 12中,因为CCD_。"从对象的方法访问对象属性"似乎是一件很基本的事情。

好的,所以从这个对this-in-javascript-prototype-functions的保留引用中,我得到了jquery绑定方法。这个问题是关于原型的,我认为原型就像静态方法,但它似乎有效。

设置处理程序:

var that = this;
$(this.Video).bind("loadedmetadata", function (event) {
event.widget = that; that._videoInited(event); 
});

绑定页面上说现在使用方法上的jquery

var that = this;
$(this.Video).on("loadedmetadata", function (event) {
event.widget = that; that._videoInited(event); 
});

然后使用我想要的:

_videoInited: function (evt) {
console.log(evt); // has a new dynamic widget property
console.log(this); // refers to the widget

感觉有点奇怪和松散,但似乎不出所料。

相关内容

  • 没有找到相关文章