Как Symfony способ установить переменную javascript? - PullRequest
0 голосов
/ 01 марта 2010
<script type="text/javascript">var name="value";</script>

Мне нужно выполнить его до того, как другой файл будет включен в use_javascript('name.js');

Как это сделать в Symfony?

Ответы [ 3 ]

3 голосов
/ 01 марта 2010

Вы можете сделать это любым количеством способов

скажем, в вашем методе действия вы добавляете переменную шаблона следующим образом:

$this->jsVar = 'foo';

Затем в ваших файлах шаблонов

echo javascript_tag( 'var name="' . $jsVar . '";' );

или

<script type="text/javascript">
  var name='<?php echo $jsVar; ?>';
</script>

EDIT

Хорошо, исходя из ваших конкретных потребностей, вам нужно будет сделать несколько вещей. Сначала посмотрите на шаблон вашей страницы (тот, который находится в apps/app-name/templates - вы должны увидеть строку, похожую на эту

<?php include_javascripts(); ?>

Это функция, которая берет все ресурсы javascript, определенные в view.yml файлах или включенные помощником use_javascript(), и печатает их на странице.

Итак, наша цель состоит в том, чтобы поместить блок javascript перед , куда включены все остальные скрипты (и под фронтом я имею в виду появление первым в порядке исходного кода)

Чтобы решить эту проблему более гибко, давайте используем слот. Измените вышеприведенную строку в шаблоне своей страницы, чтобы она выглядела так

<?php
  if ( has_slot( 'global_js_setup' ) )
  {
    include_slot( 'global_js_setup' );
  }
  include_javascripts();
?>

Тогда в вашем методе действия

sfLoader::loadHelpers( 'Asset' );
$this->getResponse()->setSlot(
    'global_js_setup',
  , javascript_tag( 'var name="value";' );
);

Вы можете расширить эту идею, используя слоты для компонентов, если хотите.

1 голос
/ 16 декабря 2011

это пример ветки, который вы можете использовать php.

{% if value %}
    <script type="text/javascript">var name="{{ value }}";</script>
{% endif %}

если ваш скрипт не работает, большинство ошибок (значение определяется после добавления основного скрипта), или (вы можете изменить ту же самую переменную в основном скрипте, это приведет к ошибке вашего источника).

и, если вам нужно вставить много переменных, вы можете использовать для. как это

{% if js_items %}
    <script type="text/javascript">
    {% for item in js_items %}
          var {{ item.name }} = "{{ item.value }}";
    {% endfor %}
    </script>
{% endif %}
1 голос
/ 02 марта 2010

Для реализации этого ненавязчивым способом я бы рекомендовал использовать use_dynamic_javascript помощник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...