我正在尝试让backbone-relational插件与任务和消息之间的关联一起工作。(一个任务有很多消息)。
这些信息是从一个标准的rails/activerecord站点中提取出来的,这个站点有一个task_id字段作为外键。
问题是,backbone-relational不会用任务模型上的任何消息填充' messages‘字段,除非我在反向relation...but中将键设置为" task_id“,这意味着,当从消息模型访问任务时,task_id字段填充的是实际的任务对象,而不是被覆盖的'task_id’整数。
我猜有一种简单的方法可以指定task_id作为外键来确定父任务,但是将这个键表示的对象放在不同的字段中(例如messages对象上的‘...but’),我不知道怎么做。任何想法都很感谢。下面的代码
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
}
}]发布于 2012-05-22 05:13:35
您可以使用keySource或keyDestination来解决您的特定问题。
示例
在下面的示例中,假设我们从一个老式关系数据库中获取数据,其中Monster和Loot_Item之间存在一对多关系。此关系由Monster_Id表中的Loot_Item外键表示。让我们也假设我们的REST服务不会为我们做任何花哨的数据嵌套,因为这似乎与您问题中的情况非常接近。
keySource
现在,让我们将"keySource“设置为我的外键("Monster_Id"),并将" key”设置为我希望实际数据所在的属性的名称(比如"Monster")。如果您中断调试器,您将在attributes对象中看到,实际上有一个名为" monster“的字段,并且它确实指向monster模型数据。嘿,酷!
includeInJSON
然而,如果你toJSON那只小狗,猜猜会发生什么?它把所有的怪物数据都放到了Monster_Id中,就像你不想要的一样!啊!我们可以通过将"includeInJSON“设置为"Monster_Id”来解决这个问题。现在,当它被转换成JSON时,它会在将数据序列化为JSON时将适当的ID放回Monster_Id字段,以发送到服务器。
问题解决了吗?呃,好吧,其实不一定。
警告:这一切听起来都非常有用,但我在这个场景中发现了一个相当明显的问题。如果您使用的模板引擎(例如Underscore.js中的模板引擎)要求您在将模型传递到模板之前将其转换为JSON,那么您将无法访问您的关系数据。遗憾的是,我们想要用于消息的JSON不一定与我们想要馈送到模板中的JSON相同。
发布于 2012-01-03 06:48:26
如果您希望消息JSON中的"task_id“是任务的id,而不是完整的JSON,那么将"includeInJSON”设置为任务的ID属性("task_id")
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: "task_id"
}
}]includeInJSON的"true“值表示对相关模型使用完整的JSON。
编辑:重新阅读您的问题后,我不确定我的答案是否与您的问题有关。
我最初的答案是将消息发送回服务器,您希望JSON是这样的:
{
"message_title": "My Title",
"message_body": "Blah blah blah...",
"task_id": 12345
}我不确定你到底希望发生什么,但是Backbone Relational的工作方式是,任务的消息集合将是完整模型的集合,所以你可以迭代它们并将它们传递给视图进行呈现,等等。
如果你想在一个模板中输出一个消息的id,那么你需要获取消息模型的"id":
myTask.get('messages').first().id -> returns the first message's idhttps://stackoverflow.com/questions/8704093
复制相似问题