Yii 2 registerJs in twig templates

时间:2015-05-12 13:54:28

标签: twig yii2

Yii 2.0 guide中,它表示您可以在这样的树枝模板中注册Javascript代码:

{registerJs key='show' position='POS_LOAD'}
    $("span.show").replaceWith('<div class="show">');
{/registerJs}

尝试了这一点,但它只会将整个代码段{registerJs ...作为文本输出到网页上,而不会将其添加到网页的Javascript代码中。

registerJsFileregisterCss等类似命令也无效。

我错过了什么吗?谢谢!

修改

正如Mihai P.所述,{registerJs}是Smarty模板的语法。所以,问题是:在Twig模板中注册内联JS有类似的方法吗?该文档仅提及注册资产。

3 个答案:

答案 0 :(得分:1)

您可以在Twig模板中使用this(即当前视图)来呼叫registerJs

{% set script %}
var app = new Vue({
  el: '#vue-widget',
  data: {
    message: 'Hello Vue!'
  }
})
{% endset %}

{{ this.registerJs(script,4,'vue-widget') }}

答案 1 :(得分:0)

您的示例是从智能部分复制而不是树枝。树枝部分中有一些您可能想尝试的例子。

答案 2 :(得分:0)

问题是3岁,我把它放在这里是给遇到类似问题的人。 您可以在Twig模板中将this与View常量一起使用,如下所示:

{{ this.registerJs('$("span.show").replaceWith(\'<div class="show">\');', constant('\\yii\\web\\View::POS_HEAD')) }}

而且,您还可以在Yii2控制器内调用registerJs,我认为这可以使代码更简洁

$this->getView()->registerJs('$("span.show").replaceWith(\'<div class="show">\');', \yii\web\View::POS_HEAD);