2012-11-11 48 views
0

我有一个Mediator-Sandbox库和一个构建在此库顶部的路由器扩展。要求映射:映射扩展时获取模块超时

库建成这样的:

(function(window) { 

    var MedSan = {}; 

    window.MedSan = MedSan; 

})(this); 

扩展看起来是这样的:

(function(_, Backbone, MedSan) { 

    MedSan.Router = {}; 

})(_, Backbone, MedSan); 

的需要配置加载扩展看起来是这样的:

require.config({ 

    baseUrl: "javascripts", 

    shim: { 
     "jquery": { 
      exports: "$" 
     }, 
     "underscore": { 
      exports: "_" 
     }, 
     "backbone": { 
      deps: ['jquery', 'underscore'], 
      exports: "Backbone" 
     }, 
     "Distribution": { 
      exports: "Distribution" 
     }, 
     "Distribution.Router": { 
      deps: ['underscore', 'backbone', 'Distribution'], 
      exports: "Distribution" 
     } 
    }, 

    /* 
    map: { 
     "*": { 
      "Distribution": "Distribution.Router" 
     }   
    }, 
    */ 


    paths: { 
     "jquery": "Vendors/jquery", 
     "underscore": "Vendors/underscore", 
     "backbone": "Vendors/backbone", 

     "Distribution": "Distribution/Distribution", 
     "Distribution.Router": "Distribution/Plugins/Router" 
    } 

}); 

我现在可以使用我的完整库:

require(['Distribution.Router'], function(Distribution) {}); 

当我取消了地图配置,这样我就可以使用满载模块路由器扩展这种方式:

require(['Distribution'], function(Distribution) {}); 

比我得到一个模块超时。

我在做什么错?

回答

1

当你映射到DistributionDistribution.Router,你要创建一个循环依赖,因为Distribution.Router还取决于Distribution

为了解决这个问题只需要添加另一条线路覆盖地图的DistributionDistribution.Router

map: { 
    "*": { 
     "Distribution": "Distribution.Router" 
    }, 
    "Distribution.Router": { 
     "Distribution": "Distribution" 
    } 
}