2

通过使用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
};
4

1 回答 1

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');
于 2012-06-29T14:27:36.010 回答