我已经使用Marionette几个星期了,刚刚发现了Backbone Relational,所以我想弄清楚如何整合这两者.理想情况下,我想使用复合视图来呈现这样构造的数据,其中每个'item'都有自己的项视图:
list : {
  name : 'List 1',
  items : [
    item1 : {
      name : 'Item 1',
      id : 1
    },
    item2 : { ... }
    item3 : { ... }
  ]
}
通常使用复合视图,您需要拥有一组模型,它们将迭代以呈现每个项目.通过关系,我只有一个模型(列表),并且该模型中有一个集合(项目).是否有可能使用Marionette的视图渲染出来,或者我是否需要使用简单的Backbone视图并自己处理渲染和迭代?
我正在尝试实现BackboneRelational并继续获取
"无法实例化多个Backbone.RelationalModel,每个类型具有相同的id!"
class App.Models.User extends Backbone.RelationalModel
  urlRoot : '/api/users'
  idAttribute: 'id'
  relations: [
    type: Backbone.HasMany
    key: 'plots'
    relatedModel: 'App.Models.Plot'
    collectionType: 'App.Collections.Plots'
    includeInJSON: false
    reverseRelation:
      key: 'user_id',
      includeInJSON: 'id'
  ]
class App.Models.Plot extends Backbone.RelationalModel
  urlRoot : '/api/plots'
  idAttribute: 'id'
如果我切换其中一个模型来扩展Backbone.Model我可以实例化这两个模型,但是我得到了关系功能被破坏的所有警告.
我想要实现以下目标:
 plot = new App.Models.Plot({id : 700})
 plot.fetch()
 plot.get('user')
我错过了什么?
javascript model-view-controller backbone.js backbone-relational
我一直在使用骨干关系(https://github.com/PaulUithol/Backbone-relational)来构建我的应用程序,因为我有一个模型(Room),附带了许多其他模型:
正如您在本期中所看到的,我一直收到错误
Error: Cannot instantiate more than one Backbone.RelationalModel with the same id per type 
每当我更改View或重新加载Collection时.
现在我知道有一个线程在这里他们建议使用在那里findOrCreate,但我没有单独访问模型,但我不使用Collection.fetch.有没有解决这个问题的方法?
经过另一项长期研究,出来了:-)似乎问题是关于函数"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'] …我有一个简单的应用程序,它定义了两个类,a Person和a PersonGroup,其中存在多对多关系.一个人可以没有任何组,或者被分配给所有组,以及介于两者之间的任何组.
backbonerelational.org上的示例建议使用中间模型来实现多对多关系,但是我不能将此模式用于获取(反序列化)和保存(序列化).
我想要做的是使用Backbone来反序列化类似于以下内容的JSON:
{
    People:
    [
        {
            "ID": 1,
            "Name": "John"
        },
        {
            "ID": 2,
            "Name": "Bob"
        },
        {
            "ID": 3,
            "Name": "Tim"
        },
    ],
    PeopleGroups:
    [
        {
            "ID": 1,
            "Name": "Owners",
            "People":
            [
                1,
                2
            ],
        },
        {
            "ID": 2,
            "Name": "Everyone",
            "People":
            [
                1,
                2,
                3
            ],
        },
    ]
}
我正在使用Knockback/Knockout进行数据绑定,所以问题是我需要能够通过引用访问关系.除非我能创建一个Knockback.CollectionObservable来包装集合并将ID解析为引用,否则ID数组对我没有任何帮助.
class TheModel extends Backbone.RelationalModel
    relations:[
        type: Backbone.HasMany
        key: 'subModels'
        relatedModel: SubModel
        collectionType: SubModels
        reverseRelation:
            key: 'TheModel'
    ]
themodel = new the TheModel({subModels:[{#stuff},{#stuff},{#stuff}]})
我有createModels,所以themodel.get('subModels')返回一组模型.
现在,如果我将更改的subModel数据传递给 mymodel
themodel.set({subModels:[{changedstuff},{stuff},{stuff}]})
不应该themodel抛出一个change事件?它不适合我.
如果我将相同的数据传入,则更是如此 mymodel
themodel.set({subModels:[{samestuff},{samestuff},{samestuff}]})
themodel.attributes.subModels投掷add和update事件,即使没有什么是新的.
我不确定为什么会出现这些问题,任何帮助都会很棒,谢谢!!!!
javascript model coffeescript backbone.js backbone-relational
我正在尝试让骨干关系插件与任务和消息之间的关联起作用.(任务有很多消息).
从标准rails/activerecord站点提取信息,该站点具有task_id字段作为外键.
问题是,除非我在反向关系中将密钥设置为"task_id",否则骨干关系不会在任何消息上填充"消息"字段,但这意味着,当从任务模型访问任务时在消息模型中,task_id字段填充了实际的任务对象,而不是被覆盖的'task_id'整数.
我猜有一种简单的方法可以将task_id指定为用于确定父任务的外键,但是将键表示的对象放在另一个字段中(例如,消息对象上的'task')...但是我无法弄清楚如何.任何想法都赞赏.代码如下
class Backbonescaffolddemo.Models.Task extends Backbone.RelationalModel
  paramRoot: 'task'
  relations: [{
    type: Backbone.HasMany,
    key: "messages",
    relatedModel: "Backbonescaffolddemo.Models.Message",
    collectionType: "Backbonescaffolddemo.Collections.MessagesCollection",
    includeInJSON: true
    reverseRelation: {
      key: "task_id"
      includeInJSON: true
    }
  }]
可能有人提供了通过django-tastypie和骨干关系来运行django.db模型实例的多对多字段的示例吗?现在可以使用中间模型了.
from django.db import models
class Author(models.Model):
    name = models.CharField(max_length=42)    
class Book(models.Model):
    authors = models.ManyToManyField(Author, related_name='books', through='Authorship')
    title = models.CharField(max_length=42)
class Authorship(models.Model):
    author = models.ForeignKey(Author)
    book = models.ForeignKey(Book)
以下是tastypie资源的配置:
from tastypie import fields, resources
class AuthorResource(resources.NamespacedModelResource):
    books = fields.ToManyField('library.api.resources.AuthorshipResource', 'books')
    class Meta:
        resource_name = 'author'
        queryset = models.Author.objects.all()
class BookResource(resources.NamespacedModelResource):
    authors = fields.ToManyField('library.api.resources.AuthorshipResource', 'authors')
    class Meta:
        resource_name = 'book'
        queryset = models.Book.objects.all()
class AuthorshipResource(resources.NamespacedModelResource):
    author = fields.ToOneField('library.api.resources.AuthorResource', 'author')
    book = fields.ToOneField('.api.resources.BookResource', 'book')
    class Meta:
        resource_name = 'authorship'
        queryset = models.Authorship.objects.all() …我有两个模型(用户和任务),它们是实例Backbone.RelationalModel.    
这两个模型的关系如下:
// Task model
    var Task = Backbone.RelationalModel.extend({
        relations: [
            {
                type: 'HasOne',
                key: 'user',
                relatedModel: User
            }
        ],
        urlRoot: 'someUrl'
    });
然后我有一个代码看起来像这样的集合:
var FollowerCollection = Backbone.Collection.extend({
    initialize: function () {
         _.bindAll(this);
    }
    model: User
});
var User = Backbone.RelationalModel.extend({
});
当我在FollowerCollection上进行提取时,我收到以下错误:
 Uncaught TypeError: Cannot read property 'idAttribute' of undefined
在骨干关系的1565行 backbone-relation version 0.5.0
这里是一段backbone-relation.js的代码
if ( !( model instanceof Backbone.Model ) ) {
    // Try to find 'model' in Backbone.store. If it already exists, set the …我一直在寻找有关如何在Backbone中建立关系的信息,并且遇到了以下两个不错的插件:
两者似乎都存在了两年多,似乎很稳定.然而,Backbone-relational一枝独秀对Backbone-associations在以下条款:
one-to-one, one-to-many, many-to-one我们在数据库中一样Backbone.js)乍一看既然,我没有时间广泛浏览这两个插件,我想从有经验的人那里了解下面的事情:
javascript jquery backbone.js backbone-relational backbone-associations
backbone.js ×8
javascript ×5
coffeescript ×2
jquery ×1
knockback.js ×1
many-to-many ×1
marionette ×1
model ×1
requirejs ×1
tastypie ×1