在我的文档就绪函数中,我创建了一个对象videoList,当我检查并逐步执行代码时,该对象确实存在了很短的时间。但是,在创建后不久,它将被返回,而不是由另一个函数定义。我的代码如下:
$(document).ready(function(){
var videoList = new Object();
videoList.videoPlaylist = [];
videoList.addNew = function(data){
$('.videoPlayer iframe').first().remove();
}
videoList.removeOld = function(){
}
});
这是一个名为video.js的文件。在另一个文件buffer.js中,它在video.js之后加载并且不包含在ready函数中我有:
function loadTracks(playlistID){
if(GoogleAuth.currentUser.get().hasGrantedScopes(SCOPE)){
var request = gapi.client.request({
'method':'GET',
'path':'/youtube/v3/playlistItems',
'params':{
'playlistId':playlistID,
'part':'snippet',
'maxResults':'15',
'key':'AIzaSyD0OY6xhl9gP9CmPXvU-rN-purRDaTrip8'
}
});
request.execute(function(response){
$('.playlistContainer').html('');
response.items.forEach(function(element){
$('.playlistContainer').append('<div class="songTrack"><img src="'+element.snippet.thumbnails.medium.url+'"/><span data-videoId = "'+element.snippet.resourceId.videoId+'">'+element.snippet.title+'</span></div>');
});
$('.songTrack').click(function(){
var data = $(this).data('videoid');
videoList.addNew(data);
console.log('I was clicked');
});
console.log(response);
});
}
}
这样做的要点是,它将一个视频列表添加到容器中,每个视频都应该是可点击的。 videoList对象最终将包含大量视频,addNew和removeOld将处理数组维护。我还在学习对象,但是从我收集的内容来看,videoList对象不应该在全局范围内并且可以被loadTracks()
函数访问吗?
答案 0 :(得分:5)
我认为问题在于您在jQuery函数范围内声明变量,而不是在文档就绪之外全局声明。尝试类似:
var videoList = new Object();
$(document).ready(function(){
...
});