我正在尝试从CDN模块定义嵌套依赖项。
我收到以下错误:config
行:1765 错误:./ modules / MyConcreteWidget / template.htm HTTP状态:404
似乎CDN “text!。/ pathing”认为它在LOCAL Web应用程序中。 引用的所有文件确实存在于CDN中,并且可以通过浏览器地址栏显示。
我是否必须在require(本身)中将调用包装到“MyWidget”?
本地需要配置如下:
require.config({
paths:
{
, jquery: '/scripts/jQuery/jquery-1.8.3.min'
, jsRender: '/scripts/jQuery/jsrender-1.0pre'
, text: '/scripts/RequireJS/2.1.4/text-2.0.5'
, domReady: '/scripts/RequireJS/2.1.4/domReady-2.0.1'
, 'myConcreteWidget': '/Modules/MyConcreteWidget/control'
, 'myWidet': 'http://server1/Modules/MyWidget/control'
},
shim:
{
'jsRender': { deps: ['jquery'] }
}
});
本地需求如下:
require(['myConcreteWidget', 'domReady'],
function (myConcreteWidget, domReady) {
domReady(function () {
// Use the concrete widget here...
});
});
LOCAL DEFINE LOOKS LIKE:myConcreteWidget
此定义将使用CDN“Widget”作为依赖项。
define(
[
'myWidget'
],
function (myWidget) {
var concrete = new myWidget.MyWidget();
// Configure the concrete here...
// Return concrete widget here
return concrete;
});
CDN DEFINE看起来像:myWidget
define(
[
'jquery'
, 'jsRender'
, 'text!./templates.htm'
],
function ($, jsRender, templates) {
$('body').append(templates);
function MyWidget(){
this.widgetId = 0;
this.name = 'Something Awesome';
};
return { MyWidget: MyWidget};
});
更新
模板文件只是SCRIPT标签(用于模板)。
答案 0 :(得分:1)
相对模块ID相对于参考ID而不是路径进行解析。所以在这种情况下,由于'myWidget'要求'./templates',它会被解析为模板ID命名空间顶部的'模板',所以在baseUrl下查找,除非有其他配置,比如路径配置在播放中。因此,您可以为“模板”添加路径条目以获得所需的分辨率。
另请注意,文本插件存在跨域限制:https://github.com/requirejs/text