经过另一项长期研究,出来了:-)似乎问题是关于函数“getObjectByName”.它不能与requireJS(ADM)一起使用.目前,我必须设置一个globel var来解决问题.我相信必须有更好的解决方案.
这是我的临时解决方案:
(1)设置全局var并将搜索模型范围设置为全局(“APP”)
var APP = {}; define(['backbone-relational'],function(){ Backbone.Relational.store.addModelScope(APP); })
(2)将您的关系模型导出到全局
APP.YourRelationalModel = YourRelationModel;
它有效,虽然不好……我真的很期待一个更好的答案.谢谢.
// ————
测试版本:
1.Backbone-Relational 0.8.5 2.Backbone 1.0.0 and Underscore 1.4.4 3.JQuery 1.8.3 4.RequireJS 2.1.5
代码很简单:(或参见https://github.com/bighammer/test_relational_amd.git)
require.config({ paths : { js : 'js',jquery : 'js/jquery-1.8.3',underscore : 'js/underscore',backbone : 'js/backbone','backbone-relational' : 'js/backbone-relational' },shim : { underscore : { exports : '_' },backbone : { deps : ['underscore','jquery'],exports : 'Backbone' },'backbone-relational' : { deps: ['backbone'] } }
});
define(['backbone','backbone-relational'],function (Backbone) { var Child = Backbone.RelationalModel.extend(); var Parent = Backbone.RelationalModel.extend({ relations : [ { key : 'child',type : Backbone.HasOne,relatedModel : 'Child' } ] }); var test = new Parent();
});
将以上代码保存在main.js中并包含在index.html中,如下所示:
它不起作用.有警告信息:
Relation=child: missing model,key or relatedModel (function (){ return parent.apply(this,arguments); },"child",undefined).
我读了骨干关系的源代码,知道命名空间有问题. Relational-Backbone无法找到在“Parent”中定义的relatedModel(即找不到releatedMode:“Child”).由于我对javascript的了解有限,我找不到解决方法来解决这个问题:-)
谁能帮我这个?
在我提出问题之前,我研究了以下解决方案:
Backbone.RelationalModel using requireJs
Can’t get Backbone-relational to work with AMD (RequireJS)
Loading Backbone.Relational using Use! plugin
在这种情况下,他们都没有工作.
解决方法
你不必按字符串引用relatedModel,你可以直接引用它,所以代替relatedModel:’Child’,只需使用:relatedModel:Child.
由于您使用的是requireJS,因此您可以轻松地从其他文件中引用模型.
define(['backbone','models/child',function (Backbone,Child) { var Parent = Backbone.RelationalModel.extend({ relations : [{ key : 'child',relatedModel : Child }] }); var test = new Parent(); });