[英]Appending SVG to DOM not working - Reload Asset Pipeline?
我在Asset Pipeline中有JavaScript,這些JavaScript與特定視圖上的特定DOM元素進行交互。 例如:
# app/assets/javascripts/book.js
...
var svg = d3.select("#book").append("svg")
...
我的視圖/pages/book
看起來像:
<% content_for :head do %>
<%= javascript_include_tag 'd3' %>
<% end %>
<h1>Book</h1>
<div id="book"></div>
<% content_for :body do %>
<%= javascript_include_tag 'book' %>
<% end %>
我的assets.rb
具有:
Rails.application.config.assets.precompile += %w( d3.js )
Rails.application.config.assets.precompile += %w( book.js )
當我去到localhost:3000/pages/book
它完美的作品中, SVG
結合到#book
當我從root localhost:3000
並遵循鏈接<%= link_to "See Book", pages_book_path %>
,DOM元素存在, HTML
呈現,但是SVG
不會綁定到#book
。
在終端中查看,當我直接轉到localhost:3000/pages/book
,資產管道已加載,並且javascript正確執行。 當我從root
開始時,發生了同樣的事情,但是由於#book
在root
視圖上不存在,所以什么也沒有發生……而當我跟隨鏈接時,資產管道不會重新加載……
跟隨鏈接后,如何重新加載資產管道?
你需要確保你的JavaScript代碼的資產被包裹在一個jQuery頁面ready
和page:load
是這樣的:
$(document).on('ready page:load', function () {
var svg = d3.select("#book").append("svg")
});
我相信這應該歸咎於Turbo鏈接,並且像您所說的#book
,在#book
之前運行附加到#book
代碼。 為了使它在您訪問該頁面時運行,我想上面的內容對您來說很有效。
如果您嘗試嵌入svg,則那里有一些寶石和自定義方法。 我在網上搜索2分鍾后發現了這四個來源,因此您可能會遇到更好的東西,這可能會為您提供所需的東西。 我將從這里開始:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.