1

我已经尝试解决这个问题几个小时了,我自己也找不到解决方案,也无法在互联网上找到解决方案,所以最后我放弃了,决定发布一个问题。

我正在尝试使用 RequireJS 使用作为 AMD 管理的 javascript 构建我的新 PHP 应用程序。这是我第一次使用这种方法,我对此感到非常兴奋,但是有一个问题使我的 javascript 无法正常运行。

这是通过路由完成的很好的 url。(我使用 Nette Framework 作为路由,使用 Apache 作为网络服务器)。在我设置 requrejs 和我的依赖项后,主页 (localhost/) 一切正常,但是当我转到其他页面时,它的 URL 类似于 localhost/news,它停止工作并且 requirejs 抱怨不存在的脚本例如 "localhost/testapp/news/js/vendor/jquery/dist/jquery.js". 相反,它应该查找 in "localhost/testapp/js/vendor/jquery/dist/jquery.js",但它将被 mod_rewrite 重写的参数(在本例中为演示者名称)作为基本 url 的一部分。我相信问题出在我这边,因为这必须是非常常见的设置,我无法找到类似的问题。

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

应用程序.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 作为“根”,而不是脚本本身的 URL(在“脚本”标签中使用)。至少我还没有找到解决这个问题的方法。

相反,我删除了整个 app.js 文件并将配置直接移动到主模板中,并使用 php 变量 $basePath 可用,我用它来定义 basePath(基本上我定义了一个绝对路径而不是相对路径)。

于 2015-01-22T14:12:15.833 回答