首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Backbone-Relational (0.8.5)与RequireJS协同工作?

如何使Backbone-Relational (0.8.5)与RequireJS协同工作?
EN

Stack Overflow用户
提问于 2013-04-13 00:43:44
回答 2查看 3.5K关注 0票数 7

经过长时间的研究,发现了一些东西:-)问题似乎与函数"getObjectByName“有关。它不能很好地与requireJS(ADM)配合使用。目前,我必须设置一个globel变量来解决这个问题。我相信一定有更好的解决方案。

这是我的临时解决方案:

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

代码语言:javascript
复制
var APP = {};

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

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

代码语言:javascript
复制
APP.YourRelationalModel = YourRelationModel;

它起作用了,虽然不是很好...我真的很期待一个更好的答案。谢谢。

//

测试版本:

代码语言:javascript
复制
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)

代码语言:javascript
复制
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']
    }
}

});

代码语言:javascript
复制
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中,如下所示:

它不起作用。出现警告消息:

代码语言:javascript
复制
Relation=child: missing model, key or relatedModel (function (){ return parent.apply(this, arguments); }, "child", undefined). 

我读了backbone-relational的源代码,知道名称空间有问题。关系主干找不到"Parent“中定义的子节点(即找不到releatedMode:”relatedModel“)。由于我对javascript的了解有限,我未能找到解决方案来解决这个问题:-)

有人能帮我吗?

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

Backbone.RelationalModel using requireJs

Can't get Backbone-relational to work with AMD (RequireJS)

Loading Backbone.Relational using Use! plugin

在这种情况下,它们都不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-13 05:02:13

您不必通过字符串引用relatedModel,您可以直接引用它,因此不使用relatedModel: 'Child',只需使用:relatedModel: Child

由于你使用的是requireJS,你可以很容易地从其他文件中引用模型。

代码语言:javascript
复制
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();
});
票数 15
EN

Stack Overflow用户

发布于 2016-11-18 11:49:54

上面的解决方案不适用于我。我正在逐步将代码从Rails Asset Pipeline (不是RequireJS/AMD/CommonJS/anything)移到Webpack中,从依赖项开始。当我将我的模型和关系定义的requiring backbone-relational转移到使用Rails Asset Pipeline进行绑定准备时,我开始得到很多无法解释的Relation=child: missing model, key or relatedModel (function (){ return parent.apply(this, arguments); }, "child", undefined).

在我的例子中,解决方案最终相当简单,尽管我花了很长时间才发现:

代码语言:javascript
复制
// In a Webpack module, later included into Rails Asset Pipeline
// temporarily to facilitate migration

require('expose?Backbone!backbone') // Exposing just for migration
require('backbone-relational')
Backbone.Relational.store.addModelScope(window)

默认情况下,backbone-relational使用它的全局作用域来解析基于字符串的relatedModel,但由于它是在没有真正的全局作用域的情况下需要的,因此解决方案只是在使用addModelScope时传递它,这样它就可以在该作用域中搜索指定的模型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15976713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档