#javascript #jquery #firebase #firebase-realtime-database #prototype
# #javascript #jquery #firebase #firebase-realtime-база данных #прототип
Вопрос:
Я хочу вызвать текущую функцию прототипа экземпляра из динамически созданной функции, но я не могу этого сделать. Я использую пример дружественного чата Google Firebase.
Вот файл JS.
// Initializes FriendlyChat.
var chat = "test";
function FriendlyChat() {
this.checkSetup();
$("#l_chat").html("");
this.initFirebase();
//LOAD ALL CHATs
this.database1 = firebase.database();
this.messagesRef1 = this.database1.ref('messages/');
this.messagesRef1.on("child_added", function(snapshot, prevChildKey) {
var newPost = snapshot.val();
console.log(newPost);
var name1 = String(snapshot.key);
document.getElementById("l_chat").innerHTML = '<button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-color-text--white" onclick="click1('' name1 '');"><i class="material-icons">chat</i><span>'
snapshot.key '</span></button><br/>';
});
}
// Sets up shortcuts to Firebase features and initiate firebase auth.
FriendlyChat.prototype.initFirebase = function() {
// Shortcuts to Firebase SDK features.
this.auth = firebase.auth();
this.database = firebase.database();
this.storage = firebase.storage();
// Initiates Firebase auth and listen to auth state changes.
this.auth.onAuthStateChanged(this.onAuthStateChanged.bind(this));
};
// Loads chat messages history and listens for upcoming ones.
FriendlyChat.prototype.loadMessages = function() {
this.messagesRef = this.database.ref('messages/' chat);
// Make sure we remove all previous listeners.
this.messagesRef.off();
$("#messages").html("");
// Loads the last 15 messages and listen for new ones.
var setMessage = function(data) {
var val = data.val();
this.displayMessage(data.key, val.name, val.text, val.photoUrl, val.imageUrl);
}.bind(this);
this.messagesRef.limitToLast(15).on('child_added', setMessage);
this.messagesRef.limitToLast(15).on('child_changed', setMessage);
};
function click1(name) {
chat = name;
console.log ('test works ' chat);
this.loadMessages(); // here is the problem!!!!
};
window.onload = function() {
window.friendlyChat = new FriendlyChat();
};
Итак, как вы можете видеть, я динамически создаю click1
функцию, и я хочу, когда я нажимаю на объект, чтобы перезагрузить сообщения, к которым я хочу получить доступ FriendlyChat.prototype.loadMessages
.
Что я уже пробовал?
this.loadmessages();
и
FriendlyChat.prototype.loadMessages();
Но они не работают. Есть ли какой-нибудь способ сделать это?
Комментарии:
1. Может
window.friendlyChat.loadMessages()
быть?2. @rbntd вам почти никогда не нужно ссылаться на объект window, так как вы можете получить доступ к его содержимому из области видимости globak. окно. a равно a
3. Ваша реальная проблема заключается в использовании встроенных атрибутов обработчика событий html, которые могут вызывать только глобальные функции (например
friendly1
). Используйте надлежащий прослушиватель событий и закрытие.