【问题标题】:What's the symfony way to set a javascript variable?symfony 设置 javascript 变量的方法是什么?
【发布时间】:2010-03-01 17:23:12
【问题描述】:
<script type="text/javascript">var name="value";</script>

我需要在use_javascript('name.js');包含的另一个文件之前执行它

在symfony中怎么做?

【问题讨论】:

  • “symfony 风格”是什么意思?无论您是否使用任何服务器端框架,Javascript 都只是 Javascript。
  • @Pascal MARTIN,刚刚更新澄清。

标签: javascript symfony1


【解决方案1】:

你可以通过多种方式做到这一点

比方说,在你的动作方法中,你像这样添加了一个模板变量

$this->jsVar = 'foo';

然后,在您的模板文件中

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

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

编辑

好的,根据您的具体需求,您需要做一些事情。首先,查看您的页面模板(位于apps/app-name/templates 的模板 - 您应该会看到如下所示的一行

<?php include_javascripts(); ?>

该函数获取view.yml 文件中定义的所有javascript 资源或use_javascript() 帮助程序包含的所有javascript 资源并将它们打印到页面。

因此,我们的目标是在包含所有其他脚本的地方放置一个 javascript 块(在前面,我的意思是按源顺序首先出现) p>

为了以某种灵活的方式解决这个问题,让我们使用一个插槽。将页面模板中的上述行修改为如下所示

<?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";' );
);

如果你愿意,你可以通过使用组件槽来扩展这个想法。

【讨论】:

  • 我需要在use_javascript('name.js');包含的另一个文件之前执行它
  • 啊,我明白你的意思了。我会在几秒钟内更新我的答案
【解决方案2】:

要以不显眼的方式实现这一点,我建议使用use_dynamic_javascript 助手。

【讨论】:

  • 如何强制它在包含其他 javascript 文件之前出现?
  • use_javascript(以及use_dynamic_javascript)助手的第二个参数是“position”。从sfWebResponse::$position 可以看出,有效位置是“first”、“”(空字符串)和“last”(我们可以使用sfWebResponse::FIRSTsfWebResponse::MIDDLEsfWebResponse::LAST)。因此,要强制它们出现在其他文件之前,您必须将它们放在“第一个”“插槽”中,而将其他文件放在“中间”,或者放在“中间”,而将其他文件放在“最后”一个。
  • 当然更方便,但用它“射自己的腿”会容易得多。
【解决方案3】:

这是你可以使用 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 %}

【讨论】:

    猜你喜欢
    • 2017-12-08
    • 2014-12-08
    • 1970-01-01
    • 2015-09-11
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多