1

私はこの問題を何時間も解決しようとしてきましたが、自分でもインターネットでも解決策を見つけることができなかったので、ついにあきらめて質問を投稿することにしました.

RequireJS を使用して、AMD として管理されている JavaScript で新しい PHP アプリを構築しようとしています。このアプローチを使用するのは初めてで、とても興奮していますが、javascript が機能しない問題が 1 つあります。

ルーティングによる素敵なURLです。(ルートには Nette Framework を使用し、Web サーバーには Apache を使用します)。requrejs と依存関係をセットアップした後、すべてがホームページ (localhost/) で正常に動作しますが、localhost/news のような URL を持つ他のページに移動すると、動作が停止し、requirejs はたとえば、存在しないスクリプトについて不平を言います "localhost/testapp/news/js/vendor/jquery/dist/jquery.js". 代わりに を検索する必要"localhost/testapp/js/vendor/jquery/dist/jquery.js"がありますが、ベース URL の一部として mod_rewrite によって書き換えられた引数 (この場合はプレゼンター名) を取ります。これは非常に一般的なセットアップである必要があり、同様の質問を見つけることができなかったため、私の側のどこかに問題があると思います。

layout.latte の requirejs (基本テンプレート):

<script src="{$basePath}/js/vendor/requirejs/require.js"></script>
<script>
    var absolute_base = {$basePath};
    require([absolute_base + '/js/app.js']);
</script>

(Nette フレームワークの basePath 変数では、追加のパラメーターに関係なく、常にアプリのルートになります。この場合は/testapp)

app.js

requirejs.config({
    baseUrl: 'js/modules',
    paths: {
        'jquery': '../vendor/jquery/dist/jquery',
        'ink': '../vendor/InkJS/dist/js/ink-all',
        'ajax': '../vendor/ajax'
    }
});

ディレクトリ構造:

 - www
    - css
    - sass
    - graphics
    - fonts
    - js
        - modules
        - vendor
            - jquery
            - requirejs
            - ink
        - app.js
    - index.php

これは私が得た限りです。多くの組み合わせ、相対パス、パスの前のドット、スクリプト タグのデータ属性などを試しましたが、解決策を見つけることができませんでした。

どんな助けでも大歓迎です、乾杯!

4

1 に答える 1

1

私はついにそれを機能させました。この方法では実行できないことがわかりました.requirejsは、スクリプト自体のURL(「script」タグで使用)ではなく、常に現在のURLを「ルート」として使用するためです。少なくとも私はこれを回避する方法を見つけていません。

代わりに、app.js ファイル全体を削除し、basePath を定義するために使用した php 変数 $basePath を使用して、構成をメイン テンプレートに移動しました (基本的に、相対パスではなく絶対パスを定義しました)。

于 2015-01-22T14:12:15.833 に答える