我在/views/A/
文件夹中有A.php视图文件。
我在/views/A/
文件夹中有A.js js文件
请帮我在视图文件中注册js文件。
据我所知,我必须写
视图文件中的$this->registerJsFile('path/to/file.js');
。
但是(问题A)我从PHPStorm收到method registerJsFile is not found in a class
消息。
另外(问题B)考虑到两个文件位于同一文件夹/views/A/
中,我应该在路径中写什么?
答案 0 :(得分:14)
这不是很优雅,但是如果你需要在jquery之后注册你的js文件(如Yii2文档中所示)
<?php $this->registerJsFile(Yii::$app->request->baseUrl.'/js/youFile.js',['depends' => [\yii\web\JqueryAsset::className()]]); ?>
答案 1 :(得分:7)
如果您通过以下方式注册js文件:
$this->registerJsFile("@web/js/all.js");
这将有效,但您将无法使用jQuery。因为在jQuery之前加载了这个文件all.js
。要在jQuery之后加载,我们将其依赖于'yii\web\YiiAsset'
或\yii\web\JqueryAsset
。所以它将在jQuery.js
之后加载。例如:
$this->registerJsFile("@web/js/all.js",[
'depends' => [
\yii\web\JqueryAsset::className()
]
]);
那么\yii\web\JqueryAsset
和\yii\web\YiiAsset
之间有什么区别?
在jQueryAsset
中,js文件将在jQuery.js
之后加载,在YiiAsset
中,js文件将在yii.js
文件之后加载。
如果您想创建自己的自定义资产包:
<?php
namespace frontend\components;
use yii;
use yii\web\AssetBundle;
class CustomAssets extends AssetBundle
{
public $css = [
"path/to/css/file.css"
];
public $js = [
"path/to/js/file.js"
];
public $depends = [
];
}
答案 2 :(得分:6)
有没有具体的理由手动包含文件而不是创建资产包?
在任何情况下,如果您已阅读documentation regarding assets,您会注意到来源,已发布的明显区别和外部资产。
最重要的部分是 source 和发布的资产使用不同的选项来确定是否以及如何发布文件。
在您的情况下,您有一个来源资产,需要将其复制到资产目录。
将registerJsFile
调用为hinted in the documentation,预计已发布资产。
这里有两个选项,第一个可能更快更连贯:
web/
文件夹中的资源,如web/js/
或您喜欢的任何内容,并继续使用registerJsFile()
希望这能解决问题。
答案 3 :(得分:4)
在给定的职位上注册您的js文件
$this->registerJsFile('path/to/file.js', ['position' => \yii\web\View::POS_END]);
第一个参数是我们想要插入页面的实际JS代码。第二个参数确定脚本应插入页面的位置。可能的值有:
查看头部的POS_HEAD。
打开后立即查看:: POS_BEGIN。
在关闭前查看:: POS_END。
View :: POS_READY,用于在文档就绪事件上执行代码。
这将自动注册jQuery。 View :: POS_LOAD用于在文档加载事件上执行代码。这将自动注册jQuery。 最后一个参数是一个唯一的脚本ID,用于标识代码块并用相同的ID替换现有的代码块,而不是添加新的代码块。如果您不提供,则JS代码本身将用作ID。
可以添加外部脚本,如下所示:
$this->registerJsFile('http://example.com/js/main.js', ['depends' => [\yii\web\JqueryAsset::className()]]);
registerJsFile()的参数类似于registerCssFile()的参数。在上面的示例中,我们使用依赖于JqueryAsset的main.js文件进行注册。这意味着将在jquery.js之后添加main.js文件。如果没有此依赖关系规范,main.js和jquery.js之间的相对顺序将是未定义的。
答案 4 :(得分:1)
答:来自文档:http://www.yiiframework.com/doc-2.0/yii-web-view.html 你的代码似乎是正确的。
您是否从视图文件本身注册了js?不是控制器? registerJsFile()方法来自视图类。
您的IDE很可能找不到该方法,您是否已在apache环境中尝试过它?
B:使用别名