yii2在视图中注册js代码

时间:2016-04-15 06:02:21

标签: yii2

在yii2视图中注册js代码的最佳方法是什么?

1

<?php
    $this->registerJs(
    '$("document").ready(function(){ alert("hi"); });'
    );
  ?>

2

<?php 
     $this->registerJs('alert("hi");', View::POS_READY);
?>

3

<?php 
  $script = "function test() { alert('hi');}";    
  $this->registerJs($script, View::POS_END, 'my-options'); 
?>

4 个答案:

答案 0 :(得分:18)

Yii2,在视图中编写代码

<h2>Content</h2>
<?php
$script = <<< JS
    alert("Hi");
JS;
$this->registerJs($script);
?>

答案 1 :(得分:3)

<?php 
$this->registerJs( <<< EOT_JS_CODE

  // JS code here

EOT_JS_CODE
);
?>

所以你不必逃避js代码

  

https://www.yiiframework.com/doc/guide/2.0/en/output-client-scripts

答案 2 :(得分:1)

我创建了一个简单的小部件,它允许我保持代码清洁并允许IDE正确解析。

<强>公共/插件/ InlineScript.php

<?php namespace common\widgets;

/**
 * Easily add JS to the end of the document.
 */
class InlineScript {

    /**
     * Open output buffer.
     */
    public static function listen() {
        ob_start();
    }

    /**
     * Capture the output buffer and register the JS.
     *
     * @param   yii\web\View    $view   The view that should register the JS.
     */
    public static function capture($view) {
        $view->registerJs(preg_replace('~^\s*<script.*>|</script>\s*$~ U', '', ob_get_clean()));
    }

}

用法示例(在视图中)

<?php ob_start(); ?>
    <script>
        alert('asd');
    </script>
<?php $this->registerJs(preg_replace('~^\s*<script.*>|</script>\s*$~ U', '', ob_get_clean())) ?>

如您所见,这确实使用了输出缓冲区,因此需要谨慎使用它。如果每个listen()后面都没有显示capture(),那么您可能会进入调试噩梦:)

答案 3 :(得分:0)

I prefer use richardfan's widget:

use richardfan\widget\JSRegister;

 <?php JSRegister::begin(['position' => static::POS_BEGIN]); ?>
        <script>
           alert('Hello world');
        </script>
<?php JSRegister::end(); ?>