如何使Backbone-Relational(0.8.5)与RequireJS一起工作?

big*_*mer 7 requirejs backbone-relational

经过另一项长期研究,出来了:-)似乎问题是关于函数"getObjectByName".它不能与requireJS(ADM)一起使用.目前,我必须设置一个globel var来解决问题.我相信一定有更好的解决方案.

这是我的临时解决方案:

(1)设置全局var并将搜索模型范围设置为全局("APP")

var APP = {};

define(['backbone-relational'], function(){
    Backbone.Relational.store.addModelScope(APP);
})
Run Code Online (Sandbox Code Playgroud)

(2)将您的关系模型导出到全局

APP.YourRelationalModel = YourRelationModel;
Run Code Online (Sandbox Code Playgroud)

它有效,虽然不好......我真的很期待一个更好的答案.谢谢.

// ------------

测试版本:

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
Run Code Online (Sandbox Code Playgroud)

代码非常简单:(或参见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']
    }
}
Run Code Online (Sandbox Code Playgroud)

});

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();
Run Code Online (Sandbox Code Playgroud)

});

将以上代码保存在main.js中并包含在index.html中,如下所示:

它不起作用.有警告信息:

Relation=child: missing model, key or relatedModel (function (){ return parent.apply(this, arguments); }, "child", undefined). 
Run Code Online (Sandbox Code Playgroud)

我读了骨干关系的源代码,知道命名空间有问题.Relational-Backbone无法找到在"Parent"中定义的relatedModel(即找不到releatedMode:"Child").由于我对javascript的了解有限,我找不到修复此问题的解决方案:-)

谁能帮我这个?

在我提出问题之前,我研究了以下解决方案:

使用requireJs的Backbone.RelationalModel
无法使用Backbone-relational与AMD协同工作(RequireJS)
使用Use加载Backbone.Relational!插入

在这种情况下,他们都没有工作.

xzh*_*ang 15

你不必按字符串引用relatedModel,你可以直接引用它,所以不要relatedModel: 'Child'只使用:relatedModel: Child.

由于您使用的是requireJS,因此您可以轻松地从其他文件中引用模型.

define(['backbone', 'models/child', 'backbone-relational'], function (Backbone, Child) {
  var Parent = Backbone.RelationalModel.extend({
    relations : [{
        key          : 'child',
        type         : Backbone.HasOne,
        relatedModel : Child
    }]
  });

  var test = new Parent();
});
Run Code Online (Sandbox Code Playgroud)