两个模型之间的骨干关系

时间:2012-06-28 21:34:17

标签: backbone.js backbone-relational

使用Backbone-relational我希望以这种方式完成模型任务:

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
});

(2)

task = {
    id: 1
    assigned_id: 2
    name: 'read a book',
    user: null // null instead of having something related to user model
};

1 个答案:

答案 0 :(得分:2)

不确定你的任务模型的确切JSON是什么,所以我猜这里。

Backbone-relational期望完全嵌套的模型:

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');