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

经过另一项长期研究,出来了:-)似乎问题是关于函数“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();
});

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...