Я нашел сценарий PubSub в Интернете, который работает довольно хорошо, к сожалению, я не совсем понимаю, как это работает ...
Это не проблема до сих пор. Для проекта мне нужно вызвать функцию через этот скрипт pubsub и передать ему некоторые события . on ( 'scrollChanged' , self . translate ); , Однако функция, похоже, не принимает никаких аргументов и только передает измененную переменную своего события.
Вот строка кода, которая подписывается на событие PubSub и вызывает функцию:
self.translate()
Как вы, вероятно, можете сказать, событие - это событие прокрутки, а переданное значение - количество прокрутки пикселей.
Эта строка находится внутри плагина jQuery, который я сейчас разрабатываю, и должен действовать как вызов функции, который мы обычно будем делать следующим образом: translate
До сих пор все работает хорошо, но init
функции также нужны некоторые другие переменные от -функции (из которой она называется). Поэтому обычно я бы написал:[...] init: function( options, this ) { // Logic self.translate(var1, var2); }, translate: function( var1, var2 ) { // Logic } [...]
events.on( 'scrollChanged', self.translate );
Чтобы обновить функцию во время прокрутки, мне нужно вызвать ее с помощью yScroll
funtion, а также передать переменную для некоторых вычислений. Но если я передаю две переменные, я получаю сообщения об ошибках, которые говорят мне, что функция не определена.// Exchanged `self.translate(var1, var2);` in the above code by: events.on( 'scrollChanged', self.translate(var1, var2) );
var events = {
events: {},
on: function (eventName, fn) {
this.events[eventName] = this.events[eventName] || [];
this.events[eventName].push(fn);
},
off: function(eventName, fn) {
if (this.events[eventName]) {
for (var i = 0; i < this.events[eventName].length; i++) {
if (this.events[eventName][i] === fn) {
this.events[eventName].splice(i, 1);
break;
}
};
}
},
emit: function (eventName, data) {
if (this.events[eventName]) {
this.events[eventName].forEach(function(fn) {
fn(data);
});
}
}
};
Поэтому я предполагаю, что код PubSub не принимает никаких других переменных ?!
Надеюсь, что кто-нибудь может мне помочь.
Код PubSub
emit
Ошибка возникает в этой строке функции fn
:
EMIT (данные);
и говорит мне, что не определено.$(window).scroll(function(){ var yScroll = $(this).scrollTop(); events.emit('scrollChanged', yScroll); });
Вот код, .on()
который работает хорошо, если аргументы не передаются:
()