0

Rails 3.1 edge 使用 sprockets 来处理 .js 和 .scss 文件。Sprocket 使用注释来处理依赖关系。

我将三个文件夹(dojo dijit dojox)放在 vendor/assets/javascripts 中。然后在 app/assets/javascripts/application.js 添加一行 //= require dojo/dojo console.log(dojo);

现在 dojo 已经被合并到 application.js 中。但是dojo本身有依赖系统。当我需要更多的 dojo 模块时。它找不到正确的路径。dojo.require("dojox.grid.DataGrid"); // webkit 控制台中的错误:错误:无法加载 'dojox.grid.DataGrid'; 最后尝试 '../dojox/grid/DataGrid.js' // Rails 服务器日志中的错误:在 4 月 16 日星期六 01:26 开始 GET "/undefined../dojox/grid/DataGrid.js" for 127.0.0.1: 05 +0800 2011

这是两个不同的依赖系统。我怎样才能把它们放在一起?

4

4 回答 4

1

dojo.js不会太自然地被重命名。这是因为 Dojo 初始化过程的一部分涉及在 DOM 中搜索负责加载自身的脚本标记。它这样做有两个原因:

  1. 确定其baseUrl是否尚未指定
  2. 选取脚本标签本身指定的任何djConfig(或data-dojo-config1.6+)属性

当它搜索这个脚本标签时,它会寻找一个src设置为dojo.jsor dojo.xd.js; 在您的情况下找不到它,因此失败了。

应该可以解决这两个问题,方法是在加载 Dojo之前的另一个标签中以完全编程方式指定djConfig(或dojoConfig在 1.6+ 中) ,并在这些配置属性中手动指定。scriptbaseUrl

例如,如果您application.jsvendor/assets/javascripts原始帖子中提到,您可以尝试这样做:

<script type="text/javascript">
    //if you're using 1.5 or earlier, use djConfig instead of dojoConfig
    var dojoConfig = {
        //note that baseUrl points to the folder containing dojo.js, therefore the dojo folder
        baseUrl: 'vendor/assets/javascripts/dojo/'
    };
</script>
<script type="text/javascript" src="vendor/assets/javascripts/application.js"></script>

有关 dojo 配置设置的更多信息:http: //dojotoolkit.org/reference-guide/djConfig.html (事实上,该页面实际上在 baseUrl 下有一个注释,专门关于重命名dojo.js。)

于 2011-04-16T01:07:51.597 回答
1

尝试将 dojo 文件添加dojo/scripts/vendor/assets/javascripts. 在 dojo 目录中,在该目录中创建一个 dojo.js 文件dojo并放入//= provide "scripts"该文件。

然后在你的application.js文件中放//= require <dojo>. 查看 Sprockets 站点http://getsprockets.org/以获取信息,但这应该可以。

这些文档还没有针对 Rails 3.1 和资产管道,所以很多这些东西都是你自己想弄清楚的。

于 2011-05-24T05:29:56.557 回答
0

嗯......你为什么把你的 javascripts 放在vendor和应用程序中而不是public/javascripts?您已经在 path_to_javascript的用途中public/javascripts包含了任何内容=javascript_include_tag('path_to_javascript')"dojo/DataGrid"public/javascripts/dojo/DataGrid.js

http://guides.rubyonrails.org/getting_started.html

于 2011-04-15T23:34:46.080 回答
0

我知道这可能有点晚了,但我可以帮助别人。

我终于让它工作并在这里发布了解释。

于 2011-10-19T19:15:03.980 回答