Submodelos backbone-relacionales con RequireJS
Estoy tratando de encontrar una manera de usar submodelos de Backbone-relacionales con RequireJS, donde los submodelos están en archivos diferentes que la supermodelo.
Por ejemplo:
// app.js
define(function() {
var app = {};
var app.ns = {};
Backbone.Relational.store.addModelScope(app.ns);
});
// Classroom/Person.js
define(["app", "./Student", "./Professor"], function(app) {
app.ns.Classroom.Person = Backbone.RelationalModel.extend({
subModelTypes: {
'Student': 'Classroom.Student'
'Professor': 'Classroom.Professor'
},
alertHello: function() {}
});
return app.ns.Classroom.Person;
});
// Classroom/Student.js
define(["require", "app", "./Person"], function(require, app) {
app.ns.Classroom.Student = require("./Person").extend({
alertHello: function() {
alert("Hello, I am student " + this.get("name"));
}
});
return app.ns.Classroom.Student;
});
// Classroom/PersonCollection.js
define(["app", "./Person"], function (app, Person) {
app.ns.Classroom.PersonCollection = Backbone.Collection.extend({
model: Person
});
});
// alertPeople.js
define(["Classroom/PersonCollection"], function(PersonCollection) {
var people = PersonCollection([{"name": "Bob", "type": "Person"}]);
people.each(function(person) {
person.alertHello();
});
});
Cuando ejecuto alertPeople.js, espero una alerta de "Hola, soy el alumno Bob", pero en su lugar me aparece este error:Uncaught Error: Module name "Classroom/Person" has not been loaded yet for context: _
Debido a mi dependencia circular. ¿Cuál es una posible solución para solucionar esto?
Mi próximo problema puede ser potencialmente con el alcance de Backbone-relational. En mi archivo app.js agrego parte de app.ns del ámbito, y me aseguro de que todos mis modelos estén definidos en el objeto app.ns. Hago esto de manera que cuando defino mis SubModelTypes, realmente puede hacer referencia a los submodelos, pero no estoy seguro de si esto funcionará todavía, ya que no puedo superar el problema de la dependencia circular.
Cualquier ayuda es muy apreciada. ¡Gracias!