Магистрально-реляционные подмодели с RequireJS

Я пытаюсь найти способ использовать Backbone-реляционные подмодели с RequireJS, где подмодели находятся в разных файлах, чем супермодель.

Например:

// 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();
  });
});

Когда я запускаю alertPeople.js, я ожидаю предупреждения «Здравствуйте, я студент Боб», но вместо этого я получаю эту ошибку:Uncaught Error: Module name "Classroom/Person" has not been loaded yet for context: _ из-за моей круговой зависимости. Какое решение можно обойти?

Моя следующая проблема может быть связана с Backbone-реляцией. В моем файле app.js я добавляю app.ns часть области видимости и проверяю, что все мои модели определены в объекте app.ns. Я делаю это так, когда я определяю свои subModelTypes, он может ссылаться на подмодели, но я не уверен, будет ли это работать, поскольку я не могу обойти проблему циклической зависимости.

Любая помощь очень ценится. Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос