【问题标题】:Backbone js model response array to Backbone collectionBackbone js模型响应数组到Backbone集合
【发布时间】:2012-05-15 09:47:53
【问题描述】:

如果我有一个模型的一些参数是集合,例如:

var Mdl = Backbone.Model.extend({

  defaults:{
    test: new Backbone.Collection()
  }
});

现在假设我在这个模型上进行了一次提取,在我的服务器端响应中,我有一个名为“test”的属性,它是一个数组。我想将数组添加到我的集合中或使用此数组重置它,以便它仍然是主干集合,但是如果我在我的模型上运行重置,默认情况下不会这样做,正如预期的那样,它将覆盖“测试”属性与响应中的数组。

让它将响应属性“test”视为骨干集合而不是数组的最佳方法是什么?我基本上想检查该属性是否是一个数组,然后检查该属性是否已经在模型上定义为一个集合,如果是,那么用数组重置这个集合而不是覆盖它。

我可以通过创建自己的 Backbone Sync 来做到这一点,但我不确定这是否是最好的方法,你们觉得呢?

谢谢。

【问题讨论】:

  • 您不需要覆盖同步。 Backbone 提供了 parse 方法,它采用 response documentcloud.github.com/backbone/#Model-parse 你现在必须编写代码来做你想做的事情
  • 你真的这样做了吗? new Backbone.Collection() 我宁愿创建一个集合的实例,如下所示。 var tstCol = Backbone.Collection.extend({}); ... defaults:{test:new tstCol()}...

标签: javascript backbone.js


【解决方案1】:

如果你在Model.defaults check this answer 中定义Objects,首先你会遇到奇怪的问题。

如果您真的想这样做,请尝试在延迟函数中进行:

// code no tested
var Mdl = Backbone.Model.extend({
  defaults:{
    test: function() { return new Backbone.Collection() }
  }
});

我仍然认为这不是一个好主意,我真的更喜欢在 Model.attributes 中有基本值,我认为这是 Backbone 所期望的。

在这种情况下,我所做的是使服务器 JSON 响应具有一个名为 test_data 的密钥并在 Model.initialize 中手动解析它:

// code no tested
var Model = Backbone.Model.extend({
  initialize: function(){
    this.test = new Backbone.Collection( this.get( "test_data" ) );
  }
});

Check this SO question

看到Model.get("test_data")是原始数据,真正的Object是Model.test,最后一个不包含在Model.attributes中。

【讨论】:

    【解决方案2】:

    我使用Backbone Relational 来解决这类问题。

    您可以编写这样的代码来定义关系。

    Mdl = Backbone.RelationalModel.extend({
        relations: [{
                type: Backbone.HasMany,
                key: 'test',
                relatedModel: 'TestModel',
                collectionType: 'TestCollection',
                reverseRelation: {
                    key: 'mdl'
                }
            }]
    });
    
    TestModel = Backbone.RelationalModel.extend({});
    
    TestCollection = Backbone.Collection.extend({
        model: TestModel
    });
    

    然后它将您的测试属性转换为主干集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 2012-12-30
      • 1970-01-01
      相关资源
      最近更新 更多