2

我正在处理我的第一个代码点火器项目。我有一些需要编写的 javascript 来启动文档准备好的实例。这是一个关闭,永远不会再被调用。我需要将它包含在头部,但在某些情况下我需要在正文的末尾执行此操作。因此,例如,假设我有这个:

<script>
alert('this is a one off alert');
</script>

做这些事情的最佳实践是什么?将它放在控制器中是否可以接受?它需要一个模型写作吗?或者我是否需要为要在 MVC 中的每个脚本创建单独的视图?

谢谢。

4

2 回答 2

1

通常我使用的做法是这样的:

  1. 所有视图文件都加载一个公共标题。并且视图文件在控制器的末尾加载。

  2. 您可以硬编码或传递要从控制器启动的脚本的链接。对脚本标签进行硬编码是不言自明的。如果您想更动态地执行此操作,您可以设置一个脚本源数组并在标头中循环它们。

所以在控制器中

$data['scripts'] = array();
$data['scripts'][] = 'http://yoursourcehere';

或者如果是自托管:

$data['scripts'][] = site_url('assets/js/yourscript.js');

然后视图

if(isset($scripts))
{
   foreach($scripts as $script)
   {
      echo '<script type="text/javascript" src="'.$script.'"></script>';
   }    
}

所以基本上你可以把你所有的自定义脚本放在一个单独的文件中,然后以这种方式加载它。它很实用,因为它可以以一种通用的方式一次加载所有脚本。

于 2013-03-18T17:30:41.763 回答
1

JS 是 HTML 的一部分,所以它不应该在控制器或模型中,所以它应该在视图中,因为你正在使用框架,那么你应该将它保存在一个单独的文件中,你可以为控制器中的每个方法拥有单独的文件或每个控制器一个 JS 文件。

你也可以在你的核心文件夹中创建一个 base_controller 并用它扩展你的所有控制器,在那里你可以设置所有默认的 JS 和 CSS。因此,如果您为控制器调用索引方法,它将使用默认的 JS 和 CSS 加载,如果需要添加任何新的,只需从控制器传递它,如 John B 所说

您可以在帮助文件中使用此功能

/**
 * getting js files from public folder
 * @param array $js
 * @return string
 */
function js_tag($js) {
    $out = "";
    if (!empty($js)) {
        $js = array_reverse($js);
        foreach ($js as $j) {
            if (strstr($j, "http:") == "" && strstr($j, "https:") == "") {
                if ($j == 'tinymac') {
                    $out.='<script type="text/javascript" src="' . base_url() . 'jscripts/tiny_mce/tiny_mce.js"></script>' . "\n";
                } else {
                    $out.='<script type="text/javascript" src="' . base_url() . 'public/js/' . $j . '"></script>' . "\n";
                }
            } else {
                $out.='<script type="text/javascript" src="' . $j . '"></script>' . "\n";
            }
        }
    }
    $out .= '<script type="text/javascript"> var baseurl = "' . base_url() . '"</script>' . "\n";
    return $out;
}

/**
 * getting css files from public folder
 * @author Amir M
 * @param array $css
 * @return string
 */
function css_tag($css) {
    $out = "";
    if (!empty($css)) {
        $css = array_reverse($css);
        foreach ($css as $c) {
            if (strstr($c, "http:") == "" && strstr($c, "https:") == "") {
                $out.= link_tag(base_url() . "public/css/" . $c) . "\n";
            } else {
                $out.= link_tag($c) . "\n";
            }
        }
    }
    return $out;
}

你可以从控制器调用它

public function index(){
  $data['js'] = js_tag('one.js', 'two.js' , 'jquery.js');
  $data['css'] = css_tag('one.css', 'two.css' , 'jquery-ui.css');
$thuis->load->view('index' , $data);
}

注意:上述方法将反转数组,因此数组中的最后一个值将首先出现在页面上,因此将 jQuery 保持在数组中的最后

在所有网站上通用的标题中

<?php echo $js.$css?>
于 2013-03-18T18:22:05.253 回答