我已经创建了一个JS库来处理我的所有API调用。
有没有办法在我的所有视图中自动将其包含在api
中,而无需在每个视图的顶部定义它?
我已经尝试将其添加到主js文件中,但这似乎不会进入视图。
答案 0 :(得分:2)
每个Backbone模型都应该处理其API端点通信,每个模块应该只需要它所依赖的模型。否则,它会使您的代码更加模块化。
话虽如此,如果您只是希望您的API库随处可用,有一些方法可以实现这一点,并且您尝试失败的原因是因为每个模块都是在没有API作为依赖项的情况下定义的,所以每个模块的顺序创建不一定是你想的那个。
您需要确保您的API模块是在Backbone之后定义的,但在其他所有内容之前。我喜欢的一种方法是创建一个重写模块。
backbone.extension.js
)。map
config option将每个模块的名为backbone
的依赖项指向新模块。map
选项,让新模块指向原始backbone
。map
选项?因为我喜欢在require config中正确定义每个路径。我不希望任何库路径位于我的自定义模块中。如果它改变了,我只需要在一个地方改变它。
制作模块,说custom/plugins/backbone.extension.js
。
然后,配置路径并将它们映射到正确的文件:
paths: {
"backbone": "lib/backbone/backbone",
"backbone.extension": "custom/plugins/backbone.extension"
},
map: {
"*": {
// every module should use our custom module.
"backbone": "backbone.extension",
},
// our custom module should use the original backbone
"backbone.extension": { "backbone": "backbone", },
},
创建一个依赖于Backbone和API库的模块。
defined(['backbone', 'api'], function(Backbone, api){
var View = Backbone.View;
var BackboneExtView = View.extend({
api: api
});
Backbone.View = BackboneExtView;
// or, for this simple case
Backbone.View.prototype.api = api;
retrun Backbone;
});
如果您的API模块需要Backbone,可能会出现一个问题。如果是这种情况,您可以在map
配置中添加一个例外,这样您的API就需要原始的Backbone,并且它避免了循环依赖。