通过使用Backbone-relations,我希望以这种方式完成模型任务:
task = {
id: 1
assigned_id: 2
name: 'read a book',
user: userModel
};
我确实尝试过这种方式(1),但结果如下(2)。
有什么想法吗?
(1)
var User = Backbone.RelationalModel.extend({
// urlRoot
});
var Task = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasOne,
key: 'user',
relatedModel: User
}
],
// urlRoot
});
(二)
task = {
id: 1
assigned_id: 2
name: 'read a book',
user: null // null instead of having something related to user model
};
不确定您的任务模型的确切 JSON 是什么,所以我在这里猜测。
主干关系需要完全嵌套的模型:
task = {
id: 1
assigned_id: 2
name: 'read a book',
user: {
name: 'Fred Rogers',
id: 42,
occupation: 'Hero'
}
};
或者一个字符串/数字,它将假定为相关模型的 id:
task = {
id: 1
assigned_id: 2
name: 'read a book',
user: 42
};
我猜你正在遇到第二种情况,基于你为用户模型获得的null
值。
当主干关系实例化模型的实例,并且相关模型是"键"字符串/数字时,它将搜索其内部模型存储以尝试查找匹配的模型。 如果找到它,它将该模型设置为用户属性的值。
如果找不到模型,它将键存储在模型的相关关系属性model._relations[n].keyContents
中,并将用户值设置为 null
。
此时,您将使用 fetchRelated
函数从数据存储/API 获取相关模型。
因此,请尝试调用task.fetchRelated()
以获取相关的用户模型:
task.fetchRelated('user');