渲染javascript文件,同时使其作为静态文件可用
Render javascript file, while making it available as a static file
我有一个javascript文件访问的url,如"/js/someFile.js"。然而,我希望Yii渲染javascript文件时,它已被请求,所以我可以包括相关的数据,例如从数据库表解析列表。
我明白一个解决方案是简单地使文件静态,并在初始化时从服务器请求数据,但是我希望不要这样做。
有没有人知道如何实现这一点,而不把JS内联在当前视图?或者有什么理由证明这是个糟糕的主意吗?
您可以呈现Twisted1919所示的视图。但我确实认为这不是一个好主意,通过Yii渲染javascript。你的问题已经暗示,javascript文件几乎是静态的。所以把它当作一个静态文件,这样你的web服务器可以更快地为它服务。在客户端缓存这个文件更容易。
然后,正如你所建议的,试着用一种方式来写,你只需要把动态部分作为参数传递给你的javascript。但是,您不必像您暗示的那样从服务器请求该数据。您可以将配置内联添加到您的页面:
<?php
$data = json_encode(array(
'userId' => Yii::app()->user->id,
'whatever' => $someThing,
));
Yii::app()->clientScript->registerScriptFile('my.js');
Yii::app()->clientScript->registerScript(
'initJs',
"myJs.init($data)",
CClientScript::POS_READY
);
?>
你可以有一个叫做js或javascript的特殊控制器来调用它而不是调用静态js文件:
class JsController extends Controller{
public function init() {
header('Content-Type: application/javascript');
}
public function actionSome_action(){
$this->render('some_action_view_file');
}
}
你甚至可以为它定义一个重写规则,这样你就可以为你的url拥有。js扩展名。
接下来,在控制器中输入:
class SiteController extends Controller {
public function actionIndex() {
// register the script
Yii::app()->clientScript->registerScriptFile($this->createUrl('js/some_action'));
// do other things here...
}
}
相关文章:
- Grunt-connect在根目录之外提供静态文件
- 在Hapi.js中提供静态JavaScript文件不起作用
- 压缩静态HTML文件中的JS和CSS
- 调用Javascript中的Python函数,读取静态文件(Flask)
- 使用CloudFront和AmazonS3,或者其他CDN,我可以将所有类似的请求发送到一个静态文件中
- 如何在javascript中获取静态公用文件夹中的文件列表
- 在使用 Django 静态文件时动态设置映像时,只有绝对路径才能与 jquery 一起使用
- Expressjs 静态文件不起作用
- 究竟是什么'提供静态文件'意思是
- 我可以'不要在ExpressJS中使用我的静态JS文件
- 在Android Web视图中使用静态文件作为模板
- 使用react webpack文件加载器提供静态pdf
- 无法使用express加载静态文件
- 如何使用页面.js和 Apache 路由/提供静态文件
- 从静态文件加载json时出错
- 如何使用Node Express提供静态文件
- 具有来自静态json文件的路由的主干应用程序(只读)
- 如何使用Node.js正确地为私有静态文件提供服务
- Django项目中第三方静态文件的推荐目录布局是什么
- 使用静态文件加载器进行角度翻译默认语言