我的 Rails 6 应用程序出现错误,因为它找不到我的数据目标,但我不明白为什么。
\nChrome\xe2\x80\x99s 控制台中的错误:
\nUncaught Error: Missing target element "channel.messages"\nRun Code Online (Sandbox Code Playgroud)\n我的看法:
\n<div class="col-sm-10" data-controller="channel" data-channel-id="<%= @channel.id %>">\n <!-- Chat messages -->\n <div class="pr-6 py-4 flex-1">\n <div data-target="channel.messages">\n <%= render @channel.messages %>\n </div>\n <div class="pb-6 pr-4 flex-none">\n <div class="flex rounded-lg border-2 border-grey overflow-hidden">\n <span class="text-3xl text-grey border-r-2 border-grey p-2">\n <svg class="fill-current h-6 w-6 block" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M16 10c0 .553-.048 1-.601 1H11v4.399c0 .552-.447.601-1 .601-.553 0-1-.049-1-.601V11H4.601C4.049 11 4 10.553 4 10c0-.553.049-1 .601-1H9V4.601C9 4.048 9.447 4 10 4c.553 0 1 .048 1 .601V9h4.399c.553 0 .601.447.601 1z"/></svg>\n </span>\n <input type="text" class="w-full px-4" placeholder="Message <%= @other_user.name %>" />\n </div>\n </div>\n </div>\n </div>\n\n <%= form_with model: [@channel, Message.new], data: { action: "ajax:success->channel#clearMessage" } do |form| %>\n <%= form.text_field :body, class: "form-control", data: { target: "channel.newMessage" } %>\n <% end %>\n</div>\nRun Code Online (Sandbox Code Playgroud)\n_消息部分:
\n<div>\n <div class="font-weight-bold"><%= message.user.name %></div>\n <div><%= message.body %></div>\n</div>\nRun Code Online (Sandbox Code Playgroud)\n我的控制器:
\nimport { Controller } from "stimulus"\nimport consumer from "channels/consumer"\n\nexport default class extends Controller {\n static targets = [ "messages", "newMessage" ]\n\n connect() {\n this.subscription = consumer.subscriptions.create({ channel: "MessageChannel", id: this.data.get("id") }, {\n connected: this._connected.bind(this),\n disconnected: this._disconnected.bind(this),\n received: this._received.bind(this)\n })\n }\n\n disconnect() {\n consumer.subscriptions.remove(this.subscription)\n }\n\n _connected() {\n }\n\n _disconnected() {\n }\n\n _received(data) {\n if (data.message) {\n this.messagesTarget.insertAdjacentHTML('beforeend', data.message)\n }\n }\n\n clearMessage(event) {\n this.newMessageTarget.value = ''\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n当我检查 HTML 时,它显示:
\n<div data-target="channel.messages">\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
9504 次 |
| 最近记录: |