Динамически предварительно заполнять комментарии в окне чата - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь создать панель управления, в которую включено окно чата. Я искал ресурсы в Интернете и нашел простой пользовательский интерфейс, используя bootstrap.

<!DOCTYPE html>
<html>
<head>
    <link href="https://netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
    
    <script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
    <script src="https://netdna.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
    <style type="text/css">
        .chat
        {
            list-style: none;
            margin: 0;
            padding: 0;
        }

        .chat li
        {
            margin-bottom: 10px;
            padding-bottom: 5px;
            border-bottom: 1px dotted #B3A9A9;
        }

        .chat li.left .chat-body
        {
            margin-left: 60px;
        }

        .chat li.right .chat-body
        {
            margin-right: 60px;
        }


        .chat li .chat-body p
        {
            margin: 0;
            color: #777777;
        }

        .panel .slidedown .glyphicon, .chat .glyphicon
        {
            margin-right: 5px;
        }

        .panel-body
        {
            overflow-y: scroll;
            height: 250px;
        }

        ::-webkit-scrollbar-track
        {
            -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
            background-color: #F5F5F5;
        }

        ::-webkit-scrollbar
        {
            width: 12px;
            background-color: #F5F5F5;
        }

        ::-webkit-scrollbar-thumb
        {
            -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
            background-color: #555;
        }

    </style>
</head>

<!------ Include the above in your HEAD tag ---------->
<div class="container">
    <div class="row">
        <div class="col-md-5">
            <div class="panel panel-primary">
                <div class="panel-heading" id="accordion">
                    <span class="glyphicon glyphicon-comment"></span> Chat
                    <div class="btn-group pull-right">
                        <a type="button" class="btn btn-default btn-xs" data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
                            <span class="glyphicon glyphicon-chevron-down"></span>
                        </a>
                    </div>
                </div>
            <div class="panel-collapse collapse" id="collapseOne">
                <div class="panel-body">
                    <ul class="chat">
                        <li class="left clearfix"><span class="chat-img pull-left">
                            <img src="http://placehold.it/50/55C1E7/fff&text=U" alt="User Avatar" class="img-circle" />
                        </span>
                            <div class="chat-body clearfix">
                                <div class="header">
                                    <strong class="primary-font">Jack</strong> 
                                </div>
                                <p>
                                    Comment 1.
                                </p>
                            </div>
                        </li>
                        <li class="left clearfix"><span class="chat-img pull-left">
                            <img src="http://placehold.it/50/FA6F57/fff&text=ME" alt="User Avatar" class="img-circle" />
                        </span>
                            <div class="chat-body clearfix">
                                <div class="header">
                                    <strong class="primary-font">Harry</strong> 
                                </div>
                                <p>
                                    Harry - Comment
                                </p>
                            </div>
                        </li>
                        <li class="left clearfix"><span class="chat-img pull-left">
                                <img src="http://placehold.it/50/FA6F57/fff&text=ME" alt="User Avatar" class="img-circle" />
                            </span>
                                <div class="chat-body clearfix">
                                    <div class="header">
                                        <strong class="primary-font">Harry</strong> 
                                    </div>
                                    <p>
                                        Harry - Comment2
                                    </p>
                                </div>
                            </li>

                    </ul>
                </div>
                <div class="panel-footer">
                    <div class="input-group">
                        <input id="btn-input" type="text" class="form-control input-sm" placeholder="Type your message here..." />
                        <span class="input-group-btn">
                            <button class="btn btn-warning btn-sm" id="btn-chat">
                                Send</button>
                        </span>
                    </div>
                </div>
            </div>
            </div>
        </div>
    </div>
</div>

Здесь каждый элемент li имеет код html в следующем формате.

<li class="left clearfix"><span class="chat-img pull-left">
                            <img src="http://placehold.it/50/FA6F57/fff&text=ME" alt="User Avatar" class="img-circle" />
                        </span>
  <div class="chat-body clearfix">
    <div class="header">
      <strong class="primary-font">Harry</strong>
    </div>
    <p>
      Some Comment.
    </p>
  </div>
</li>

Я пытаюсь предварительно заполнить прошлое комментарии из базы данных. Я получаю карту имен и их комментарии, отсортированные в порядке времени. Например, карта может быть чем-то вроде {Джек: Комментарий1, Гарри: Комментарий2 ....}

Я хочу динамически заполнить тег p комментарием, имя в strong тег с карты, которую я получаю из базы данных. Может ли кто-нибудь помочь мне в этом?

1 Ответ

1 голос
/ 23 апреля 2020

Использовать шаблон:

<template id="comment-template">
  <li class="left clearfix">
    <span class="chat-img pull-left">
      <img src="http://placehold.it/50/FA6F57/fff&text=ME" alt="User Avatar" class="img-circle" />
    </span>
    <div class="chat-body clearfix">
      <div class="header">
        <strong class="primary-font"></strong>
      </div>
      <p></p>
    </div>
  </li>
</template>

<div id="comments-cnt"></div>

Я предполагаю, что данные выглядят примерно так:

const comments = [
  { jack: 'comment1' },
  { harry: 'comment2' },
  { david: 'comment3' }
]

Затем перебираем этот массив, клонируем шаблон, заполняем его именем, комментируем каждый возьмите литерал и вставьте его в контейнер:

let commentCnt = document.getElementById('comments-cnt')
const template = document.getElementById('comment-template')

comments.forEach(function(c) {
  //extract data
  const name = Object.keys(c)[0]
  const comment = c[name]

  //create clone of the template and populate       
  let clone = document.importNode(template.content, true)
  clone.querySelector('strong').innerText = name
  clone.querySelector('p').innerText = comment

  //insert
  commentCnt.appendChild(clone)
})

Структура вашего элемента / шаблона <li> делает его очень простым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...