Rails with backbone-rails: helpery zasobów (ścieżka obrazu) w plikach EJS
Mam aplikację Rails 3.1, która używa codebrew / backbone-rails . W a .jst.szablon ejs, chciałbym dołączyć obrazek, Tak:
<img src="<%= image_path("foo.png") %>"/>
Ale oczywiście helpery zasobów nie są dostępne w JavaScript.
Łańcuchowanie ERB (.jst.ejs.erb) nie działa, ponieważ składnia EJS koliduje z ERB.
Oto co wiem:
- helpery zasobów nie są dostępne w przeglądarce, więc muszę je uruchomić po stronie serwera.
- I can work problem polega na tym, że serwer zrzuca różne ścieżki zasobów do HTML (poprzez atrybuty danych lub
<script>
i JSON) i odczytuje je z powrotem w JS, ale wydaje się to dość kłopotliwe.
Czy jest jakiś sposób na wykorzystanie helperów zasobów w plikach EJS?
5 answers
Jest sposób na łańcuch A.jst.ejs.plik erb, chociaż jest dość nieudokumentowany, i znalazłem go tylko poprzez przeglądanie spraw testowych EJS. Możesz powiedzieć EJS, aby używał {{ }} (lub [ % % ] lub czegokolwiek innego, co chcesz) zamiast, a ERB nie będzie próbował Oceniać Twoich połączeń EJS.
Upewnij się, że gdzieś w Twoim kodzie wymagany jest EJS (właśnie włączyłem gem 'ejs'
do mojego Gemfile), a następnie utwórz inicjalizator (nazwałem go ejs.rb), który obejmuje:
EJS.evaluation_pattern = /\{\{([\s\S]+?)\}\}/
EJS.interpolation_pattern = /\{\{=([\s\S]+?)\}\}/
Wtedy po prostu upewnij się, że zmienisz nazwy szablonów na .jst.ejs.erb i zastąp istniejący kod EJS interpretowany przez {{ }}. Jeśli chcesz użyć czegoś innego niż {{ }}, Zmień wyrażenia regularne w inicjalizatorze.
Szkoda, że nie ma opcji w Sprockets, aby poradzić sobie z tym poprzez config, a nie muszą wyraźnie zawierać EJS, ale na razie, nie ma sposobu, aby to zrobić, że wiem o.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-14 19:12:16
Widzę dwa sposoby. Ani świetne.
Kiedy mówisz <%%= variable %>
to jest to renderowane przez ERB jako <%= variable %>
, więc możesz dwukrotnie uciec od wszystkiego , ale asset_tags i to przetrwałoby podróż przez jeden ERB pass w drodze do EJS.
Co powiesz na utworzenie innego pliku javascript z rozszerzeniem ERB, który definiuje ścieżki zasobów? A następnie użyj potoku zasobów, aby tego wymagać.
Więc powiedz assets.js.erb
definiuje coś w stylu:
MyAssets = {
'foo': <%= image_path("foo.png") %>,
...
}
A potem Zażądaj tego gdzieś w górnej części listy. A potem odwołaj się do globali, które działają w EJS.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-29 20:35:11
Dla tych, którzy chcą spróbować HAML zamiast EJS: używanie haml-coffee przez haml_coffee_assets również dobrze mi poszło.
Możesz mieć następujące w .hamlc.plik erb:
%img(src="<%= image_path('foo.png') %>")
(nadal nie daje Ci jednak pomocników routingu, tylko pomocników zasobów.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-11 18:48:49
Ryan Fitzgerald był na tyle uprzejmy, aby opublikować gist jego JavaScript asset helpers (które zostały wstępnie skompilowane z ERB): https://gist.github.com/1406349
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-30 21:22:24
Możesz użyć odpowiedniego Helpera Javascript za pomocą następującego klejnotu: https://github.com/kavkaz/js_assets
Wreszcie (po zainstalowaniu i skonfigurowaniu) będziesz mógł go używać w następujący sposób:
<img src="<%= asset_path("foo.png") %>"/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-15 12:04:47