我有两个模型(使用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')
的{{3}}。所以我将代码更改为:
// 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
尚未定义,因此{{1不存在。
我该怎么办?
答案 0 :(得分:5)
好的,所以修复非常简单。这是任何有兴趣的人。 require
将使用它的.extend({})
函数中的模型// 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
}
});
。例如:
modelB
问题是当modelA
被引导时modelB
没有被引导。然后,不可能要求页面顶部的{{1}}。相反,你需要在函数内部。到那时,您的应用程序正在运行,所有内容都已自动启动。
答案 1 :(得分:0)
所以@Kousha帮助我解决了能够内部Bookshelf.Model.extend
我为每个模型/模型组创建文件然后导出模型的问题。所以我做了这个变化。
modelA.js
var modelA = Bookshelf.Model.extend({
tableName : 'modelA',
modelB() {
this.belongsToMany(require('./modelB).modelB);
}
});
module.exports = { modelA };
modelB.js
var modelB = Bookshelf.Model.extend({
tableName : 'modelB',
modelA() {
this.belongsToMany(require('./modelA).modelA);
}
});
module.exports = { modelB };