在yii2视图中注册js代码的最佳方法是什么?
<?php
$this->registerJs(
'$("document").ready(function(){ alert("hi"); });'
);
?>
<?php
$this->registerJs('alert("hi");', View::POS_READY);
?>
<?php
$script = "function test() { alert('hi');}";
$this->registerJs($script, View::POS_END, 'my-options');
?>
答案 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(); ?>