我有两个模型(使用BookshelfJS或BackboneJS无关紧要):modelA
,modelB
。 modelA
需要modelB
,modelB
需要modelA
。
最初,我有:
// modelA
var Bookshelf = require('bookshelf);
var modelB = require('./modelB');
var modelA = Bookshelf.Model.extend({});
module.exports = modelA;
// modelB
var Bookshelf = require('bookshelf);
var modelA = require('./modelA);
var modelB = Bookshelf.Model.extend({});
module.exports = modelB;
然后,我阅读有关
Bookshelf.plugin('register')
的here。所以我将代码更改为:// modelA
var Bookshelf = require('bookshelf);
var modelB = Bookshelf.model('modelB');
var modelA = Bookshelf.Model.extend({});
Bookshelf.model('modelA', modelA);
// modelB
var Bookshelf = require('bookshelf);
var modelA = Bookshelf.model('modelA');
var modelB = Bookshelf.Model.extend({});
Bookshelf.model('modelB', modelB);
在情况1中,有一个循环依赖关系,在情况2中已得到解决。但是在情况2中,当
modelA
被引导时,尚未定义modelB
,因此Bookshelf.model('modelB')
不存在。我该怎么办?
最佳答案
好的,因此修复非常容易。这是给任何有兴趣的人的。 require
函数中将使用它的模型。例如:
// modelA (which requires modelB somewhere inside)
var Bookshelf = require('bookshelf);
var modelA = Bookshelf.Model.extend({
tableName : 'modelA',
someFunc : function() {
var modelB = Bookshelf.model('modelB');
// Now use modelB here
}
});
问题是在引导
.extend({})
时未引导modelB
。这样就不可能在页面顶部要求modelA
。相反,您需要在函数内部使用它。届时,您的应用程序将开始运行,并且一切均已启动。