定义本地Web应用程序和CDN之间的嵌套依赖项

时间:2013-03-01 20:53:11

标签: javascript asp.net requirejs cdn amd

我正在尝试从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标签(用于模板)。

1 个答案:

答案 0 :(得分:1)

相对模块ID相对于参考ID而不是路径进行解析。所以在这种情况下,由于'myWidget'要求'./templates',它会被解析为模板ID命名空间顶部的'模板',所以在baseUrl下查找,除非有其他配置,比如路径配置在播放中。因此,您可以为“模板”添加路径条目以获得所需的分辨率。

另请注意,文本插件存在跨域限制:https://github.com/requirejs/text