将Javascript移出模板文件
Moving Javascript Out of Template Files
我有一个PHP应用程序,我在视图文件中包含了很多内联javascript。我认为这样做的原因是内联脚本经常包含由控制器传递给视图的php变量。
我希望能够从视图文件中删除javascript,并将它们放在单独的文件中,但仍然能够解析文件中的php。
我有一个现有的Document类,所以我添加了一个方法renderScript
,这样我就可以传入所需的文件:
public function renderScript($script) {
$this->scripts[md5($script)] = $this->script_directory . $script;
}
然后我的意图是构建一个可以调用的控制器,它将遍历任何添加的脚本,解析php,然后将其添加到dom。
In my controller:
public function index() {
$scripts = $this->document->getScripts();
$files = '';
foreach ($scripts as $key => $value):
$files .= file_get_contents ($value);
endforeach;
$data['script'] = $files;
header('Content-Type: application/javascript');
return $this->load->view('common/javascript', $data);
}
那么在我看来:
<script>
<?= $script; ?>
</script>
然后将控制器加载到页脚控制器中:
$data['javascript'] = $this->load->controller('common/javascript');
这个工作有点…因为它确实会将整个文件返回到我的应用程序的页脚,但这并不是我真正想要的。
我宁愿能够简单地在我的页脚视图中使用脚本标签来直接调用控制器,但这不起作用,因为javascript控制器通过index.php传递,并被分派和文档重置。
所以…是否有一种方法,我可以包括这些js文件,解析其中的php,然后将它们添加到dom,而不打印整个内容到渲染的html?
我肯定有办法,只是我不明白。
好吧,我没有看到你想要的好方法。
如果脚本在单独的文件中,它将在单独的get请求中加载,这意味着控制器中的任何数据都不可用,正如您已经发现的那样。
如果你打算用php json后端移动到完整的JS前端(Angular),那么这个中间步骤似乎相当没有意义,只要坚持使用内联JS,同时你改变了Angular。
也就是说,这里有一个(不太好的)解决方案:
在主控制器的中,在渲染视图之前,将js所需的所有数据转储到session中:
$_SESSION['jsData']=array(...);
创建一个javascript控制器,用以下数据渲染js:
function renderJs($script){
$jsData = $_SESSION['jsData'];
$this->view->render($script, $jsData, 'application/javascript');
在视图中添加script标签:
<script src=/jcontroller/renderjs/somescript.php
注意js文件有一个php扩展名,所以php变量可以在你的视图中解释
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 如何将这个javascript从aspx视图中移出,并放入一个单独的js文件中
- 微小的MCE插入符号定位,同时移入和移出跨度
- 如何选择轨道框选择选项是从咖啡文件给出的
- 将鼠标快速移入/移出容器会导致不需要的 jQuery 动画
- 可移动的 jquery 框不应移出页面
- 工具提示定位和隐藏工具提示在鼠标移出后立即
- 用鼠标悬停打开菜单,当光标移出时关闭
- 将DOM元素项从react js组件中移出
- 如何在具有optgroup'的页面上按字母顺序对所有选择框进行排序;s,而不将选项从各自的组中移出
- 如何发送json文件抛出POST方法并在servlet上接收它
- 正在移出当前域
- 当元素移出窗口左侧时的条件
- OBJ文件不出现在浏览器WebGL 3 .js
- 为什么一个已知的PHP文件给出404 ?
- Javascript窗口.把鼠标移出窗外.onMouseLeave不工作
- 从包中移出依赖项后,Angular无法识别jQuery.将Json转换为Json
- 鼠标悬停和鼠标移出不触发动画元素
- Eslint和VueJS文件.抛出错误,但不修复它们
- 将Javascript移出模板文件