我有两个模型(使用BookshelfJS或BackboneJS无关紧要):modelAmodelBmodelA需要modelBmodelB需要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。相反,您需要在函数内部使用它。届时,您的应用程序将开始运行,并且一切均已启动。

10-06 07:43