Pla*_*Ton 6 javascript 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
}
}]
Run Code Online (Sandbox Code Playgroud)
小智 3
您也许可以使用keySource或keyDestination来解决您的特定问题。
在下面的示例中,假设我们从老式关系数据库获取数据,其中Monster和Loot_Item之间存在一对多关系。这种关系由Loot_Item表中的Monster_Id外键表示。我们还假设我们的 REST 服务不会为我们做任何花哨的数据嵌套,因为这似乎与您问题中的情况非常匹配。
现在,让我们将“keySource”设置为我的外键(“Monster_Id”),并将“key”设置为我想要实际数据所在的属性的名称(例如“Monster”)。如果您中断调试器,您将在属性对象中看到实际上有一个名为“Monster”的字段,并且它确实指向怪物模型数据。嘿,酷!
然而,如果你用 JSON 来处理那只小狗,你猜怎么着?它已经把所有的怪物数据都放在Monster_Id里了,就像你不想要的一样!嘎啊!我们可以通过将“includeInJSON”设置为“Monster_Id”来解决这个问题。现在,当它转换为 JSON 时,它将正确的 ID 放回到 Monster_Id 字段中,同时将数据序列化为 JSON,以发送到服务器。
问题解决了?呃,好吧,实际上,不一定……
注意:这一切听起来非常有用,但我在这种情况下发现了一个相当明显的问题。如果您使用的模板引擎(例如 Underscore.js 中的模板引擎)要求您将模型转换为 JSON,然后再将其传递到模板中,那么您将无权访问关系数据。遗憾的是,我们想要的消息 JSON 不一定与我们想要输入到模板中的 JSON 相同。