【发布时间】:2015-07-07 14:28:24
【问题描述】:
问题是我在一些 Backbone 模块之间存在循环依赖关系,因此我必须使用“导出”,因为 Requirejs 在其文档 http://requirejs.org/docs/api.html#circular 中指定。所以模型“A”看起来像这样:
define(function(require, exports) {
var B = require('B');
var A = Backbone.Model.extend({
});
exports.model = A;
});
集合'B'是这样的:
define(function(require, exports) {
var A = require('A');
var B = Backbone.Model.extend({
model: A.model
});
exports.model = B;
});
这里的问题是,当我必须指定集合“B”模型属性时,模型“A”尚未定义。这是我尝试使用这样的模型设置集合时遇到的错误:
B.collection.set([{id: 1}, {id: 2}]);
Uncaught TypeError: 'undefined' is not an object (evaluating 'targetModel.prototype') (http://127.0.0.1:9999/bower_components/backbone/backbone.js:689)
关于我应该如何解决这个问题的任何想法?
【问题讨论】:
-
有什么方法可以解决循环依赖而不是尝试解决它?这似乎可能会导致其他挫败感......
-
@rjz 我知道循环依赖通常是一种不好的做法,但是在任何情况下都需要它们,或者你永远不应该有循环依赖?
-
某处可能存在案例,但它们绝对是代码异味。如果有可能重构您的数据模型以避免它们,它将使模型更清晰和更易于维护(相关:en.wikipedia.org/wiki/Law_of_Demeter)
-
如果我无法解决循环依赖问题,我应该如何解决这个问题?
标签: javascript backbone.js requirejs