【问题标题】:How to build a Collection/Model from nested JSON with Backbone.js如何使用 Backbone.js 从嵌套的 JSON 构建集合/模型
【发布时间】:2012-01-09 00:03:21
【问题描述】:

我对 Backbone.js 比较陌生

我有一个如图所示的 JSON ! 我看到了一些与 Backbone-relational 相关的答案,但仍然不明白这一点!

如何将此 JSON 转换为 Backbone.js 集合/模型?

我更新了一个代码,但它没有像预期的那样工作!当我这样做时,我看不到模型:

我的结构是:

[0] : 是模型的集合

[谱号] + ... + [Rest] : 是模型的集合

(谱号) => [0] + ... + [9] : 是模型(标题包含字符串,路径也是)

非常感谢!!

编辑(10.01.12):

我的解决方案:

window.initModel = Backbone.Model.extend({
  defaults: {
    "title": "",
    "path": ""
  }
});
window.CustomCollection = Backbone.Collection.extend({
  model: initModel
});
window.Init = Backbone.Model.extend({
  url : function(){
    return  "/api/data.json"      
  },

  parse: function(response) {

    clefs = new CustomCollection();
    clefs.add(response.clefs);        
    this.set({clefs: clefs});

    .....

    rests = new CustomCollection();
    rests.add(response.rests);        
    this.set({rests: rests});
} 
});

this也帮了我一把!

【问题讨论】:

  • 您是否也希望拥有嵌套的 Backbone 模型/集合(这不是 100% 必要的,具体取决于您的要求)。你也许可以只使用一个 Backbone 模型和一个对象。
  • @trouble 在使用 Backbone-Relational 之后,我选择了您的解决方案(覆盖解析)。对于 Backbone-Relational,某些事件“添加”等没有触发并导致问题。感谢发帖!

标签: javascript backbone.js backbone-relational


【解决方案1】:

我在工作,所以我不能给你一个完整的编码答案,但要点是,你可以在你的顶层模型中执行以下操作来实现嵌套模型层次结构:

var AmericasNextTopModel = Backbone.Models.extend({
    initialize: function(){

        this.set({
             clefs: new ClefCollection(this.get('clefs')),
             accidentals: new AccidentalCollection(this.get('accidentals')),
             notes: new NoteCollection(this.get('notes')),
             rests: new RestCollection(this.get('rests'))
        });
    }
});

我不使用骨干关系,所以我不能给你答案。

您正在制作在线乐谱查看器/编辑器吗? :D 很酷,我很想在你完成后看到它。

【讨论】:

  • 是的,我愿意:D!!我会告诉你我什么时候完成!我在我的帖子中更新了你的答案!
【解决方案2】:

reset 方法 (see 'reset') 允许您将 JSON 数组传递给集合。 这相当于 PUT 方法,将指定的集合替换为 JSON 哈希。

您还可以使用add 方法添加到现有集合,或在创建新集合时将 JSON 哈希传递给构造函数。

您必须对阵列进行一些基本清理以使其具有适当的格式,然后convert it to JSON

【讨论】:

  • 嗯!我看到你的观点了!但这真的不能帮助我构建真正的谱号集合,...,休息不是吗?我真的需要它,就像我描述的那样!如果我错了,请纠正我!谢谢!
  • 我的错!上图是JSON!对不起
【解决方案3】:

我正在使用 PHP 来获取 JSON 格式的提要,因为它位于不同的域中。我将这些结果保存到一个 JS 变量中,然后我成功地使用它来将它放入我的 Backbone 集合中......

var feedCollection = new Backbone.Collection();
feedCollection.set(myFeedJSON.nestedObject.nestedArrayIWant);

【讨论】:

    猜你喜欢
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2013-05-27
    • 2015-01-27
    • 2013-08-14
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多