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ヘルパー」についての知識がありません。従来の方法で JavaScript を使用することはできませんか?

サイトは他のすべてのビュー (posts/add など) で正常にレンダリングされ、.js ファイルは「posts/view/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

ただし、この URL にアクセスしている場合は、

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 ヘルパーを使用してスクリプトタグを出力します (結局のところ、それが目的です: 作業を簡素化するためです :)、例えばecho $this->Html->script('jquery-1.9.1.min');
于 2013-03-22T15:44:10.403 に答える