我有非常简单的脚本目录结构:
/js/ <-- located in site root
libs/
jquery-1.10.1.min.js
knockout-2.2.1.js
knockout.mapping.js
models/
model-one.js
model-two.js
...
require.js
config.js
Run Code Online (Sandbox Code Playgroud)
由于站点引擎使用干净的URL我在使用绝对路径<script>:
<script type="text/javascript" data-main="/js/config.js" src="/js/require.js"></script>
Run Code Online (Sandbox Code Playgroud)
RequireJS配置:
requirejs.config({
baseUrl: "/js/libs",
paths: {
"jquery": "jquery-1.10.1.min",
"knockout": "knockout-2.2.1",
"komapping": "knockout.mapping"
}
});
Run Code Online (Sandbox Code Playgroud)
HTML中的某个地方:
require(["jquery", "knockout", "komapping"], function($, ko, mapping){
// ...
});
Run Code Online (Sandbox Code Playgroud)
所以问题是RequireJS完全忽略baseUrl并paths在配置文件中定义.我在下面的代码中要求的每个模块都会出现404错误.我在浏览器控制台中看到RequireJS尝试从/js/没有任何路径转换的情况下加载这些模块:
404: http://localhost/js/jquery.js
404: http://localhost/js/knockout.js
404: http://localhost/js/komapping.js
Run Code Online (Sandbox Code Playgroud)
但是在加载页面并显示错误后,我输入控制台并...
> require.toUrl("jquery")
"/js/libs/jquery-1.10.1.min"
Run Code Online (Sandbox Code Playgroud)
为什么这样?如何解决这个问题呢?
这是我第一次使用RequireJS的经历,所以我觉得我已经跳过了一些非常简单明了的东西.请帮忙.
更新
刚发现这个问题:Require.js忽略了baseUrl
这绝对是我的理由.我在我的网络面板中看到,config.js在require(...)激活自己的依赖项加载之前没有完全加载.
但是我不想放置我require(...)的配置,因为它非常特定于调用它的页面.在以前见过的任何例子中,我都没有注意到异步性这样的问题.这些例子的作者如何让他们工作?
这两个函数都允许替换/修改绑定上下文并将其应用于未绑定的节点."非绑定"意味着要使用这些有用的功能,我自己的自定义绑定必须始终返回{ controlsDescendantNodes: true }的init功能.
所以我无法理解它们之间有什么区别?