Open JackDeng666 opened 5 years ago
首先我用的 pjax,虽然不是 vue,但是导致问题的原因大体相同
由于在pjax完成时Meting会调用 APlayer 的析构,其会取消异步请求,导致其绑定的 switch函数被调用
switch 函数在调用时会更新页面的元素,而 pjax 此时已经刷新了页面,故会抛出一个undefined的异常
error code: this.player.container.querySelectorAll('.aplayer-list li')[this.index].classList.add('aplayer-list-light');
问题来自:
this.player.container.querySelectorAll('.aplayer-list li') 取不到
如果使用侵入式编程,解决起来比较麻烦,需要重新打包,也不太友好
以上都是我编的, 虽然插件不太一样,[APlayer-Typecho 的 console.log 把我带到这里] 解释上也有区别,但是原因应该类似
直接给修复建议吧
在 析构前调用
// aplayer 是 new APlayer 返回的对象
aplayer.list.index = undefined;
会跳过 switch。
首先我用的 pjax,虽然不是 vue,但是导致问题的原因大体相同
由于在pjax完成时Meting会调用 APlayer 的析构,其会取消异步请求,导致其绑定的 switch函数被调用 switch 函数在调用时会更新页面的元素,而 pjax 此时已经刷新了页面,故会抛出一个undefined的异常
error code: this.player.container.querySelectorAll('.aplayer-list li')[this.index].classList.add('aplayer-list-light');
问题来自:
this.player.container.querySelectorAll('.aplayer-list li') 取不到
如果使用侵入式编程,解决起来比较麻烦,需要重新打包,也不太友好以上都是我编的, 虽然插件不太一样,[APlayer-Typecho 的 console.log 把我带到这里] 解释上也有区别,但是原因应该类似
直接给修复建议吧
在 析构前调用
// aplayer 是 new APlayer 返回的对象 aplayer.list.index = undefined;
会跳过 switch。
我用的 pjax + metingjs1.20 ,同样报了错
Uncaught TypeError: Cannot read property 'classList' of undefined
添加了以下 js
document.addEventListener('pjax:success', function () {
for (let i = 0; i < aplayers.length; i++) {
aplayers[i].list.index = undefined;
}
loadMeting();
});
但好像没什么效果...
在其他人的帮助下找到了另一种解决方案。
删去 Aplayer.min.js
中 Aplayer
类下的析构函数 destroy()
中的 this.audio.src=''
这一句即可。
目前使用中,没有遇到其他问题。
Uncaught TypeError: Cannot read property 'classList' of undefined at e.value (list.js:176) at e.value (player.js:516) at player.js:184