【问题标题】:Backbone-relational between two models两个模型之间的骨干关系
【发布时间】:2012-06-30 11:31:06
【问题描述】:

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

【问题讨论】:

    标签: backbone.js backbone-relational


    【解决方案1】:

    不确定您的任务模型的确切 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 值,我猜您遇到了第二种情况。

    当主干关系实例化模型的实例,并且相关模型是“键”字符串/数字时,它将搜索其内部模型存储以尝试找到匹配的模型。如果找到它,它会将该模型设置为用户属性的值。

    如果找不到模型,则将key隐藏在模型的相关关系属性model._relations[n].keyContents中,并将用户值设置为null

    此时您将使用fetchRelated 函数从数据存储/API 中获取相关模型。

    所以,尝试调用task.fetchRelated()获取相关的用户模型:

    task.fetchRelated('user');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2017-06-26
      相关资源
      最近更新 更多