2017-06-02 2 views
0

Ich lerne gerade ActionCable, das ist fantastisch (stattdessen die Fehler). Und ich stehe vor einem seltsamen Problem.Aktionskabel funktioniert statt ich drücke Daten

Mein Ziel ist es, einen Kanal für die Gruppenerstellung zu erstellen. Um dem Benutzer zu ermöglichen, neue ohne Aktualisierung zu sehen.

An diesem Punkt funktioniert alles super. Aber wenn ich versuche, den Namen meiner Gruppen anzuzeigen, funktioniert das ActionCable nicht mehr. Gruppen werden gut erstellt, aber sie werden nicht in Echtzeit angezeigt. Also muss ich die Seite aktualisieren, um sie zu sehen. Kann mir jemand zu diesem Problem helfen ??

Mein Code:

Controller (Gruppen):

def index 
    @company = current_user.company 
    @groups = @company.groups 
    end 

Channel (Gruppen):

class GroupsChannel < ApplicationCable::Channel 
    def subscribed 
    stream_from "groups" 
    end 

    def speak(data) 
    group = Group.create(name: data['group'], company_id: 12) 
    html = ApplicationController.render(partial: 'groups/group', local: { 
     group: group 
    }) 

    ActionCable.server.broadcast 'groups', group: html 
    end 

end 

Coffee-Datei (Gruppen):

App.groups = App.cable.subscriptions.create "GroupsChannel", 
    connected: -> 

    $(document).on 'keypress', '#group_name', (event) => 
     if (event.keyCode == 13) 
     @speak(event.target.value) 
     $('#group_name').val('') 
     $('#MyNewGroup').modal('toggle') 

    disconnected: -> 
    # Called when the subscription has been terminated by the server 

    received: (data) -> 
    $('#groups_area').append(data.group) 

    speak: (group) -> 
    @perform 'speak', {group: group} 

Views (Index):

<div class="container"> 
    <h1 style="text-align:center; margin-bottom: 30px; margin-top: 10px;">Vos groupes</h1> 
    <div id="groups_area"> 
     <%= render @groups%> 
    </div> 
    </div> 

Views (_Konzerneffekte)

 <div class="col-md-3"> 
      <div class="panel panel-success"> 
      <div class="panel-heading"> 
       <h3 style="margin-top:0; text-align:center"> 


====================================Problem======================================== 
       <%= group.name %> 

====================================Problem======================================== 
       </h3> 
      </div> 

      <div class="panel-body"> 
       test body 
      </div> 
      </div> 
     </div> 

Also, wenn ich diese Zeile <% = group.name%> hinzufügen, die prepend Aktion funktioniert nicht mehr.

Antwort

2

Sie scheinen einen Tippfehler in Ihrer Kanaldatei zu haben. Beim Rendern eines Partials müssen Sie locals, nicht local verwenden. So gehen Sie wie folgt ändern:

html = ApplicationController.render(partial: 'groups/group', local: { 
    group: group 
}) 

ändern local zu locals:

html = ApplicationController.render(partial: 'groups/group', locals: { 
    group: group 
}) 
+0

cool !! Vielen Dank @Laith Azer, du rettest meine Nacht !! –

+0

Sie sind herzlich willkommen :) –

+0

Guter Fang @ LaithAzer –

Verwandte Themen