2017-04-12 12 views
0

RailsアプリケーションでJavaScriptを使用して動的にロードするSVGファイルがあります。 SVGをインラインでロードしてCSS fillプロパティを適用する必要があります。テキストファイルの内容をRailsのJavaScriptにロード

SVGが表示される前に潜在的な遅れを避けるために、AJAX経由でSVGファイルを読み込むのではなく、私がやりたいものを理想的に

は、私のapp/assets/icons/ディレクトリに、私はアイコンcalendar.svgphone.svgを持っているのRailsに伝えることです、とRails(スプロケットは?)これらSVGファイルの内容を取得し、文字列としてそれらを設定する必要があることJavaScriptオブジェクトSVGの値、私はこのように私のJavaScriptコードでそれらにアクセスできるように:

var view = { 
    render: function() { 
    this.element.innerHTML = SVG['app/assets/icons/calendar.svg']; 
    } 
}; 

好ましくは、溶液がちょうどSVGs以上に一般化された、と私は潜在的に経由してテキスト形式で任意のデータを読み込むことができますJS、例えばTEXT['app/assets/icons/calendar.svg']またはさらにTEXT['app/assets/etc/some-text-file.text']である。

これをRailsで実行する方法はありますか?

+0

ビューテンプレート内SVGの内容を入れてからあなたを停止しているもの(例えばERB。)? – emaillenin

+0

私は可能ですが、それはうまく拡張できません。なぜなら、私のサーバから返されたHTMLにSVGがたくさんあると、ブラウザがHTMLをダウンロードしてページを表示するのに時間がかかります。一方、あるネットワーク要求(おそらく私が作っておかなければならないJS要求)にSVGをロードすると、そのロードは、ユーザが見るためのページ上に何かがあるまで延期することができます。 – Jackson

+0

その質問に対するもう1つの答えは、アプリケーションがSPAであり、多くのアーキテクチャ上の理由から、ビューはERBテンプレートではなくJSで作成する必要があるということです。 – Jackson

答えて

0

私たちは、このためにスプロケットトランスを書くことになった:https://github.com/cloversites/js-text-rails

$ bundle install js-text-rails 

は、例えば、あなたのファイルを必要とapp/assets/images/iconsファイルenvelope.svgが含まれているapp/assets/javascripts/application.js:

//= require_tree ../images/icons 

インチ

どこでもアプリケーションのJavaScriptコードでは、グローバルSVG変数を経由して、テキストファイルの内容にアクセス:

var envelopeIcon = SVG['icons/envelope']; 
// Do something with `envelopeIcon`... 
関連する問題