带RequireJS的主干关系子模型

带RequireJS的主干关系子模型,requirejs,backbone-relational,Requirejs,Backbone Relational,我正试图找到一种方法,在RequireJS中使用主干关系子模型,其中子模型与超级模型位于不同的文件中 例如: //app.js 定义(函数(){ var-app={}; var app.ns={}; Backbone.Relational.store.addModelScope(app.ns); }); //教室/Person.js 定义([“应用程序”、“/学生”、“/教授”]、函数(应用程序){ app.ns.教室.Person=Backbone.RelationalModel.extend

我正试图找到一种方法,在RequireJS中使用主干关系子模型,其中子模型与超级模型位于不同的文件中

例如:

//app.js
定义(函数(){
var-app={};
var app.ns={};
Backbone.Relational.store.addModelScope(app.ns);
});
//教室/Person.js
定义([“应用程序”、“/学生”、“/教授”]、函数(应用程序){
app.ns.教室.Person=Backbone.RelationalModel.extend({
子模型类型:{
“学生”:“教室,学生”
“教授”:“教室,教授”
},
alertHello:function(){}
});
返回app.ns.教室.Person;
});
//教室/Student.js
定义([“要求”、“应用程序”、“用户/个人]),功能(要求、应用程序){
app.ns.教室.Student=需要(“./人”)。扩展({
alertHello:function(){
警惕(“你好,我是学生”+这个。得到(“名字”);
}
});
返回app.ns.教室.Student;
});
//教室/PersonCollection.js
定义([“应用程序”、“/人”]、功能(应用程序、人){
app.ns.教室.PersonCollection=Backbone.Collection.extend({
型号:人
});
});
//alertPeople.js
定义([“教室/PersonCollection”]、函数(PersonCollection){
var people=PersonCollection([{“name”:“Bob”,“type”:“Person”}]);
人员。每个功能(人员){
person.alertHello();
});
});
当我执行alertPeople.js时,我希望得到一个“你好,我是学生Bob”的警报,但我得到了以下错误:
未捕获错误:由于我的循环依赖关系,尚未加载上下文的模块名“教室/人”:。有什么可能的解决办法

我的下一个问题可能是关系主干的范围。在我的app.js文件中,我将app.ns添加到范围的一部分,并确保我的所有模型都在app.ns对象中定义。我这样做是因为当我定义我的子模型类型时,它实际上可以引用子模型,但我不确定这是否可行,因为我无法克服循环依赖性问题


非常感谢您的帮助。谢谢大家!

我最终解决了这个问题,我希望这对以后的其他人有所帮助

首先,我将代码修改为以下内容:

//app.js
定义(函数(){
var-app={};
var app.ns={};
Backbone.Relational.store.addModelScope(app.ns);
});
//教室/Person.js
定义([“应用程序”]、功能(应用程序){
app.ns.教室.Person=Backbone.RelationalModel.extend({
子模型类型:{
“学生”:“教室,学生”
“教授”:“教室,教授”
},
alertHello:function(){}
});
返回app.ns.教室.Person;
});
//教室/Student.js
定义([“应用程序”、“/人”]、功能(应用程序、人){
app.ns.教室.Student=Person.extend({
alertHello:function(){
警惕(“你好,我是学生”+这个。得到(“名字”);
}
});
返回app.ns.教室.Student;
});
//教室/PersonCollection.js
定义([“应用程序”、“/人”、“/学生”、“/教授”]、功能(应用程序、人){
app.ns.教室.PersonCollection=Backbone.Collection.extend({
型号:人
});
});
//alertPeople.js
定义([“教室/PersonCollection”]、函数(PersonCollection){
var people=PersonCollection([{“name”:“Bob”,“type”:“Person”}]);
人员。每个功能(人员){
person.alertHello();
});
});
我的更改包括删除教室/Person.js文件中的学生和教授依赖项,并将它们移动到教室/PersonCollection.js文件中

在此之后,我遇到了一个与关系主干相关的bug,其中addModelScope有一个与子模型和名称空间相关的bug,但我修复了它并提出了一个pull请求:,该请求已被接受

有关更完整的示例,请访问