动态加载Backbone/RequireJs中的依赖项
Dynamically load dependencies in Backbone/RequireJs
我使用的是Backbone/RequireJs javascript堆栈。我想要实现的是动态地要求Model
依赖于Backbone.Collection
,之后Collection
依赖被设置。
我想保持Collection
尽可能多的通用,我想根据当前的主要上下文分配不同的Models
和rest url。我们的目标是在特定的上下文中只加载所需的内容。
window.Collection = Backbone.Collection.extend({
initialize: function(modelName,apiRoute){
this.modelName = modelName;
this.apiRoute = apiRoute;
if (typeof(window[this.modelName]) === "function") {
this.model = window[this.modelName];
this.url = "./api/" + this.apiRoute;
}
}
...
这里的问题是主上下文中的window[this.modelName]
依赖必须在Collection
依赖之前加载。
说对象MainContext
需要一个集合:
// MainContext.js
define([
...
"model/Collection"
并在MainContext
中解析modelName
变量,该变量用于集合所需依赖项的名称值。Toys
")。如果在MainContext中设置了require(['model/Toys'])
,那么该依赖文件将加载得太晚。
在这种情况下该怎么做呢?升值。
听起来你在描述一个标准的Require.js循环依赖。换句话说,您有一个依赖于Toys的Collection,但其他一些模块使其不可能实现。
您提到的标准解决方案是使用require的同步形式,即。require(['model/Toys'])
。然而,听起来把它放在MainContext
是错误的方式,因为MainContext
加载时它还没有加载。
initialize
时)。如果您将代码更改为:
window.Collection = Backbone.Collection.extend({
initialize: function(modelName,apiRoute){
this.modelName = modelName;
this.apiRoute = apiRoute;
if (typeof(window[this.modelName]) === "function") {
this.model = require('model/' + this.modelName);
this.url = "./api/" + this.apiRoute;
}
}
....
在初始化运行时,模型应该已经被加载。
希望对你有帮助。
相关文章:
- requirejs定义:嵌套依赖关系
- requirejs+bower,bower组件中的路径和依赖关系
- Loader requireJs没有'不尊重依赖关系
- AngularJS'依赖注入和RequireJS本质上是相同的
- 模拟requireJS的内部依赖关系
- RequireJS,循环依赖和导出“魔术”方法
- 使用 requireJs 的模块中的循环依赖关系
- 如何使用requirejs保证javascript中的依赖类
- RequireJS:如何处理传递依赖项失败
- 获取依赖项以在requirejs(autobahn和whenjs)中正确加载
- RequireJS:如何处理浏览器和服务器之间共享的代码的不同模块依赖关系
- Requirejs 优化器 - 包括某些文件和文件夹的嵌套依赖项
- 如何使 requirejs 填充模块能够访问未定义的依赖项
- Requirejs 忽略可选依赖项的加载错误
- 节点中的 RequireJS 因使用插件的依赖项(例如使用.js)而失败
- RequireJS - 先初始化一个依赖模块,然后再加载其他模块
- requireJS:缩短依赖关系列表
- RequireJS不一致地加载依赖项
- RequireJS和依赖于按特定顺序加载的脚本
- requireJS中的填充依赖关系:速记与长手记法