【问题标题】:Backbone - Collections nested in ModelsBackbone - 嵌套在模型中的集合
【发布时间】:2011-09-02 19:39:16
【问题描述】:

是否可以在模型中嵌套集合?

我知道您可以在模型的初始化回调中创建新集合,并创建可以在集合和父模型之间来回传递的引用。但是是否可以将集合设置为模型的一部分,使其导出的 JSON 如下所示:

{
  blah: 'blah',
  myCollection: [
      {
         foo: 'asdf',
         bar: 'qwer'
      },
      {
         foo: 'asdf123',
         bar: 'qwer123'
      }
  ]
}

如果没有,您如何处理将具有相关集合的模型同步到后端?您是否必须利用主干的同步并重建 JSON,或者是否有更无缝的东西?

抱歉,如果此问题已在其他地方得到解答。我环顾四周,看到了一些解决方法,但没有什么能真正回答我正在寻找的东西。

【问题讨论】:

    标签: javascript json backbone.js


    【解决方案1】:

    有两种方法。首先是定义一个获取一切的根模型。你重写它的parse()方法为嵌套属性创建子集合和子模型,重写toJSON()方法转换回JSON结构,适合保存到服务器。

    这对于小型子集合是完全可以接受的。这需要一点编程,但如果你能读懂Backbone的源代码,应该怎么做,嗯,不是很明显,但至少可以理解。

    或者您可以使用Backbone Relational,它会为您完成所有工作。

    【讨论】:

      【解决方案2】:

      Renato 已关闭,但“has”和“set”尚不可用。我相信 Reckoner 指出了其中的一部分。此外,您需要从响应中删除该属性,否则它将覆盖默认值。

      _.extend(Backbone.Model.prototype, {
          parse: function(resp, xhr) {
              var attr, model, models, collection, options;
              for (var prop in resp) {
                  if (this.defaults && this.defaults[prop]) {
                      attr = this.defaults[prop];
                      if (attr instanceof Backbone.Model) {
                          model = attr.clone();
                          model.set(resp[prop]);
                          resp[prop] = model;
                      } else if (attr instanceof Backbone.Collection) {
                          models = attr.map(function (model) { return model.clone(); });
                          options = _.clone(attr.options);
                          collection = new attr.constructor(models, options);
                          collection.add(resp[prop]);
                          resp[prop] = collection;
                      }
                  }
              }
              return resp;
          }
      });
      

      希望对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多