0

当我使用带有参数的控制器函数时,渲染视图似乎忘记了每个包含的 .js 文件。

public function view($id = null) {
    if(!$id) {
        throw new NotFoundException(__('Invalid post'));
    }

    $post = $this->Post->findById($id);

    if(!$post) {
        throw new NotFoundException(__('Invalid post'));
    }
    $this->set('post', $post);
}

如果我拿走参数并将变量'$id = 1'放在函数上,则postID 1的视图在'posts/view'中呈现正常。

我以传统方式将 javascript 文件包含到 default.ctp 中:

echo "script type='text/javascript' SRC='../js/jquery-1.9.1.min.js'></script>";);

(它包括'<',但出于安全原因,我猜这个文本编辑器不会输入它)

我不了解 cakePHP 的“js helpers”。我不能以传统方式使用javascript吗?

站点在所有其他视图(例如帖子/添加)中都可以正常呈现,并且 .js 文件包含在“帖子/视图/1”的源代码中

4

1 回答 1

2

问题

您正在使用 javascript 的相对路径;

<script src='../js/jquery-1.9.1.min.js'></script>

在此 url 中,../表示“从当前位置向上 1 个目录”,因此当您当前访问此 URL 时;

http://mysite.com/home/

然后您的浏览器将正确尝试从以下位置加载脚本;

http://mysite.com/js/jquery-1.9.1.min.js

但是,如果您正在访问此网址;

http://mysite.com/home/and/some/more/

然后浏览器会在这里寻找 JavaScript:

http://mysite.com/home/and/some/js/jquery-1.9.1.min.js

如何解决问题

  1. 对所有“资产”(CSS、JavaScript、图像)使用绝对路径; src='/js/jquery-1.9.1.min.js'
  2. 使用 CakePHP Helpers 输出脚本标签(毕竟,这就是它们的目的:简化你的工作:),例如echo $this->Html->script('jquery-1.9.1.min');
于 2013-03-22T15:44:10.403 回答