kaldırmaz, ancak çalışmıyor. Dinleyiciyi lodash'ın gaz kelebeği ile ve olmadan ayarlamaya çalıştım ama hiçbir fark yaratmıyor. İşte benim kod:olay dinleyicisi pencereden ayarlanmış bir olay dinleyicisi kaldırmak gerekir
handler() {
if (this.options.url === undefined) {throw new Error('no url specified');}
if (InfiniteScroll.isElementInViewport(this.elementToWatch)) {
Promise.resolve(this.removeListener())
.then(val => {
this[this.options.transport]();
});
}
}
ya bir fark yaratmak değildi:
setupListener() {
window.addEventListener('resize', _.throttle(this.handler.bind(this), 750));
window.addEventListener('scroll', _.throttle(this.handler.bind(this), 750));
}
removeListener() {
window.removeEventListener('resize', _.throttle(this.handler.bind(this), 750));
window.removeEventListener('scroll', _.throttle(this.handler.bind(this), 750));
window.addEventListener('load', this.handler.bind(this), false);
}
static isElementInViewport (el) {
let rect = el.getBoundingClientRect();
return (
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}
handler() {
if (this.options.url === undefined) {throw new Error('no url specified');}
if (InfiniteScroll.isElementInViewport(this.elementToWatch)) {
this.removeListener();
this[this.options.transport]();
}
}
Ben de kaldırılmasını promisify çalıştık.
ilerleyen kodda, ben dinleyicileri yeniden atamak istiyorum:
handleResponse(data) {
console.log('handleResponse' + data);
Promise.resolve(this.addElementsToDOM(data))
.delay(1000)
.then(() => {
this.page++;
this.elementToWatch = document.getElementById(this.element).rows[document.getElementById(this.element).rows.length - this.options.loadTiming];
//this.setupListener();
});
}
ben her adımını açmış ve bunun nedenini bulamadı ettik. Birisi yardım edebilir mi?
Sidenote: kaldırmak ve dinleyicilere her zaman eklemek için daha kaydırma olayını ele almanın daha iyi bir yolu var mı?
Teşekkür @Amit, ben bu soru-cevap gördük. Sanırım isimlendirilmiş bir işlev kullanıyorum - ya da bir şeyleri özledim mi? –
Evet, kesinlikle noktayı kaçırıyorsunuz. Tam olarak ne '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '''' döndürülen bir değer değil ve sonra başka bir çağrıya sarın. – Amit
Cevabımı denediniz mi, J.Doe? – Buzinas