2011-12-31 3 views
1

Я хочу иметь возможность динамически ссылаться на JavaScript и таблицы стилей в зависимости от того, на какой странице пользователь находится в Express. Я думаю, что лучший способ сделать это (хотя я открыт для предложений) - передать текущее представление на страницу макета.Как обеспечить текущий маршрут или просмотреть макет в ExpressJS?

Например,

Учитывая URL-адрес http://example.com/trees

Я хотел бы иметь некоторую логику в layout.jade, что сказал что-то эффект:

script(src="/javascripts/{view}.js")

Что бы получить оказанной как:

<script src="/javascripts/trees.js"></script>

Любые предложения или рекомендации для этого?

+1

попробуйте __jade [0] .filename, и если это ответ, я объясню, как я это знаю. – jcolebrand

+0

thks @jcolebrand, это было самое простое решение для меня. –

+0

Добро пожаловать. Вам интересно узнать, как я получил это из исходного кода? – jcolebrand

ответ

4

req.route - это согласованный маршрут, поэтому доступны такие вещи, как req.route.path и т. Д., Или, конечно, req.url, который может быть проанализирован. С помощью express 2x вы можете автоматически отображать эти значения для просмотров с помощью «динамических помощников» или res.local()

+1

Примечание для выражения 3 пользователей: динамические помощники устарели в пользу app.locals http://expressjs.com/api.html#app.locals –

0

Для этого не существует лучших практик, поскольку Express не предоставляет Rails, например, помощники URL-адресов, поэтому я думаю, что вы подходите хорошо.

0

Легкий ответ - просто поместить ВСЕ свой javascript в один файл и сделать с ним. То же самое для CSS. Подробности см. На странице Ruby on Rails asset pipeline. Вероятно, вы делаете свою жизнь более сложной, чем необходимо, а также менее эффективной, имея разные javascripts на разных страницах.

Однако, поскольку вы спросили, ответ на javascripts прост. Просто поставьте лишние теги <script> на вид, а не на макет. Задача решена. CSS не работает так же чисто, потому что теги <link> должны быть внутри <head>. В этом случае я определяю стили, которые мне нужны, в виде массива строк и петлю над этим в моем шаблоне макета. Так что в моем маршруте я создал локальную переменную, такие как

locals.css = ['/css/one.css', '/css/two.css'] 

Тогда просто перебираем, что в шаблоне и генерировать один <link> тег для каждого.

Смежные вопросы