首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何最好地保持我的控制器视图不可知?

如何最好地保持我的控制器视图不可知?
EN

Stack Overflow用户
提问于 2011-03-30 06:23:05
回答 5查看 312关注 0票数 1

我在控制器中有以下代码:

代码语言:javascript
运行
复制
$this->viewdata->scripts = array(
    'http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js',
    'jstree/jquery.jstree-1.0-rc2.js',
    'jquery.hotkeys-0.8.js',
    'tags/index.js'
);

$this->viewdata->styles = array(
    'reset.css',
    'tags.css'
);

在我看来,我有一个foreach来将列出的每个javascript/css文件包装到各自的HTML标记中。我使用的是主模板/布局方法;我只需填充主模板中的任意/所有字段,就可以得到我的web页面。所以,在控制器中设置javascript/css对我来说很好,这样我的<script><link>就可以在<head>中,这是它们所属的位置。

然而,我最近意识到javascript和css不属于控制器,因为呈现的视图可能会发生变化,并且可能有非常不同的javascript/css要求。

为了便于维护,我基本上只想保留一个主模板,但也希望从控制器中删除所有对view/javascript/css的引用。有什么可以帮助我做到这一点呢?

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-30 07:03:06

我不使用CI,但我经常使用Zend和Symfony。在这两个框架中,都有某种类型的资产助手,您可以从视图中调用它来将css或js文件添加到堆栈中。然后调用类似的helper将这些文件输出到您的大脑中。例如在symfony中:

查看:

代码语言:javascript
运行
复制
<?php use_stylesheet('/css/mycss.css'); ?>
<?php use_stylesheet('/css/components.css'); ?>
<?php use_javascript('/js/site.js'); ?>

布局:

代码语言:javascript
运行
复制
<head>
  <?php include_javascripts(); ?>
  <?php include_stylesheets(); ?>
</head>

我认为,如果不是开箱即用,在CI中实现这样的东西会相对容易……

票数 2
EN

Stack Overflow用户

发布于 2011-03-30 06:51:31

我有一个项目,我也做了同样的事情,只是没那么雄辩。我想我可以通过“动态”加载js和css来减少发送给客户端的信息量。我使用控制器在我的视图中定义了文件名数组和循环,以包含它们。

我记得只有一个js文件一直没有包含在内。

你必须决定以下哪一项你比其他人更相信。

controllers

  • php不属于
  1. js/css不属于视图

这是一个混乱的决定,你必须自己找到解决的办法。

票数 1
EN

Stack Overflow用户

发布于 2011-03-30 08:37:20

我知道您可能没有使用该代码示例中的cakePHP,但是!他们有一个很好的方法来处理这个问题。它是一个用于“内联”样式、脚本等的参数。

在您的标记中,您有如下内容:

代码语言:javascript
运行
复制
<?= $scripts_for_layout ?>
<?= $styles_for_layout ?>

在视图文件本身中,您有如下代码:

代码语言:javascript
运行
复制
<?php $this->Html->script('jquery', array('inline' => true)); ?>

因此,实际的视图文件呈现,将所有脚本存储到某个数组中,然后呈现布局文件(页眉、页脚等)。

布局文件获取存储的数组,然后呈现到$scripts_for_layout变量中。

相当的天才,工作也很棒。我建议这样做。

参考:http://book.cakephp.org/view/1589/script

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5479658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档