私のアプリではチャットクライアントがあります。左側のdivには会話のリストがあり、右側のdivには#message-content
というラベルが付きます。ユーザーが会話をクリックすると、リスナーが追加され、メッセージコンテンツセクションに会話が生成されます。左のdivの別の会話をクリックすると、右のdivが消去され、リスナーで新しいメッセージが生成されます。Firebaseで複数の会話がクリックされたときにリスナーを無効にできません
問題は、リスナーを保持しているように見えるので、複数の会話を表示してメッセージを受信すると、n個のメッセージが生成されます.nは、クリックした会話の量です。
前の会話からリスナーを切り離す必要があると仮定しますが、どのように把握できません。
は、ここで私は、ユーザが左手側のli要素をクリックしたとき、それは#message-content
をクリアし、実行を呼び出す機能です:
var displayMessagesDetail = function (uid, chatID) {
usersRef.child(`${uid}/chats/${chatID}/messages`).on('child_added', function(snapshot) {
let message = snapshot.val();
let userClass = (message.user === auth.currentUser.uid ?
'message-bubble-self' :
'message-bubble-other'
);
$('#message-detail-content').append($('<p></p>').addClass(userClass).text(message.text));
});
};
どうすればいいですか?その聞き手と話し、その道を変える方法はありますか?その1つのリスナーが存在すると思うので、ユーザーが別のチャットdivをクリックすると、リスナーのパスが変更され、正しいメッセージがロードされます。 – VDog
一度にアクティブなリスナーを1つだけにしたい場合、チャットを切り替えるたびに古いものをオフにして新しいものを作成する必要があります。私はあなたがアクティブなリスナーを変更できるとは思わない。アクティブチャットuidとchatIDを変数として保存してみてください。新しいチャットに切り替えるたびに、アクティブチャットで '.off()'を呼び出すことができます。その後、新しいリスナーを作成し、アクティブなチャット変数を更新してください。 – Shane
ああ、ありがとうございます。そうですね、私は新しいメッセージのクリックでリスナーを止めました。ありがとう! – VDog