0

ジョブとメッセージを含むアプリがあります。誰かがジョブのメッセージを入力すると、そのメッセージをジョブ固有の表示ページのメッセージ リストに追加したいと考えています。

例: ユーザーがジョブ 7 にメッセージを追加した場合、そのメッセージを<ul>URL /jobs/7 の with クラス msg_listに追加します。

私が設定した方法では、すべてのジョブが表示ページを共有し、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

これを変更して、ID を含めることができます。

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

そして、セレクターは次のようになります。

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

テンプレート言語が html を構築するときに、javascript が ID を認識する方法と、ID セットを取得する方法を理解する必要があります。

于 2013-05-24T19:31:19.573 に答える
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 に答える
0

どちらのソリューションも機能しますが、解決するために、代わりにURLをチェックし、IDが一致した場合にのみメッセージをリストに追加しました

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 に答える