0

我有一个包含工作和消息的应用程序。当有人为工作输入消息时,我想将消息附加到工作特定显示页面中的消息列表中。

例如:如果用户向作业 7 添加一条消息,那么我想将该消息附加到<ul>带有类 msg_list 的 url /jobs/7

按照我的设置方式,所有作业共享一个显示页面,并且可以通过 URL /jobs/:id 访问。其中 id 是特定的工作 ID。

    <div class="show_messages">
      <div class="row">
        <div class="small-12 columns">
          <% messages = @job.messages %>
            <ul class="msg_list">
              <% messages.each do |m| %>
                <% login = m.user_id.present? ? m.user.login : m.runner.login %>
                <li class="message">
                  <p>
                    <strong><%= login %></strong>: <%= m.body %><br>
                    <span id="sent-at">Sent on <%= m.created_at.strftime("%b %d at %l:%M%p") %></span>
                  </p>
                </li>
              <% end %>
            </ul>
          <% end %>
        </div>
      </div>

当我尝试附加这样的消息时:

function addMessage(msg) {
    var new_msg = "<li><p> NEW TEST MESSAGE </p></li>";
    $('.msg_list').append(new_msg);
}

当我只想将其附加到 1 个特定工作时,我将其附加到每个工作显示中(例如:id 为 7 的工作)

谁能帮我弄清楚如何做到这一点?

4

3 回答 3

1

获取 URL 段,然后用于.eq()获取所需的工作。

var pathArray = window.location.pathname.split( '/' );
var id_from_url = pathArray[2];

$('.msg_list').eq(id_from_url).append(new_msg);

是使用 javascript 获取 URL 段的指南。

注意:.eq()是从零开始的,所以如果它不是从零开始的,你可能需要抵消你的 id。

于 2013-05-24T19:27:41.240 回答
1

您可以将其更改为包含 id:

 <ul class="msg_list_<%= id %>">

然后选择器看起来像这样:

$('.msg_list_' + id).append(new_msg);

您必须弄清楚 javascript 如何知道 id 以及在模板语言构建 html 时如何获取 id 集。

于 2013-05-24T19:31:19.573 回答
0

两种解决方案都有效,但为了解决它,我改为检查 url,如果 id 匹配,则仅将 msg 添加到列表中

function addMessage(msg) {
    // var body = msg["body"];
    // $('.msg_list').append(body)
    var new_msg = "<li><p> NEW TEST MESSAGE </p></li>";
    $('.msg_list').append(new_msg);
}

var msgChannel = pusher.subscribe('msg_channel');
msgChannel.bind('msg_added', function(msg) {
    // if (msg["job_id"] == '@job.id'){
    //  addMessage(msg)
    // }
    var message_job_id = msg["job_id"];
    var url = window.location.pathname;
    var job_show_id = url.substring(url.lastIndexOf('/') + 1);
    var show_integer = parseInt(job_show_id);
    if(message_job_id == show_integer) {
        addMessage(msg);
    }
});

});

于 2013-05-24T19:37:33.630 回答