Ensure the model is attached to DataSource for relations
This commit is contained in:
parent
7aa2eefec4
commit
ec7f79e935
|
@ -308,6 +308,10 @@ function isModelClass(cls) {
|
||||||
|
|
||||||
DataSource.relationTypes = ['belongsTo', 'hasMany', 'hasAndBelongsToMany'];
|
DataSource.relationTypes = ['belongsTo', 'hasMany', 'hasAndBelongsToMany'];
|
||||||
|
|
||||||
|
|
||||||
|
function isModelDataSourceAttached(model) {
|
||||||
|
return model && (!model.settings.unresolved) && (model.dataSource instanceof DataSource);
|
||||||
|
}
|
||||||
/*!
|
/*!
|
||||||
* Define relations for the model class from the relations object
|
* Define relations for the model class from the relations object
|
||||||
* @param modelClass
|
* @param modelClass
|
||||||
|
@ -317,7 +321,7 @@ DataSource.prototype.defineRelations = function(modelClass, relations) {
|
||||||
|
|
||||||
// Create a function for the closure in the loop
|
// Create a function for the closure in the loop
|
||||||
var createListener = function (name, relation, targetModel, throughModel) {
|
var createListener = function (name, relation, targetModel, throughModel) {
|
||||||
if (targetModel && targetModel.settings.unresolved) {
|
if (!isModelDataSourceAttached(targetModel)) {
|
||||||
targetModel.once('dataSourceAttached', function (model) {
|
targetModel.once('dataSourceAttached', function (model) {
|
||||||
// Check if the through model doesn't exist or resolved
|
// Check if the through model doesn't exist or resolved
|
||||||
if (!throughModel || !throughModel.settings.unresolved) {
|
if (!throughModel || !throughModel.settings.unresolved) {
|
||||||
|
@ -334,7 +338,7 @@ DataSource.prototype.defineRelations = function(modelClass, relations) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (throughModel && throughModel.settings.unresolved) {
|
if (throughModel && !isModelDataSourceAttached(throughModel)) {
|
||||||
// Set up a listener to the through model
|
// Set up a listener to the through model
|
||||||
throughModel.once('dataSourceAttached', function (model) {
|
throughModel.once('dataSourceAttached', function (model) {
|
||||||
if (!targetModel.settings.unresolved) {
|
if (!targetModel.settings.unresolved) {
|
||||||
|
@ -369,7 +373,7 @@ DataSource.prototype.defineRelations = function(modelClass, relations) {
|
||||||
throughModel = this.define(r.through, {}, {unresolved: true});
|
throughModel = this.define(r.through, {}, {unresolved: true});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (targetModel.settings.unresolved || (throughModel && throughModel.settings.unresolved)) {
|
if (!isModelDataSourceAttached(targetModel) || (throughModel && !isModelDataSourceAttached(throughModel))) {
|
||||||
// Create a listener to defer the relation set up
|
// Create a listener to defer the relation set up
|
||||||
createListener(rn, r, targetModel, throughModel);
|
createListener(rn, r, targetModel, throughModel);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue