2012-01-09 89 views
10

我relativly新Backbone.js的如何從嵌套的JSON建立一個集合/模型Backbone.js的

我有一個JSON喜歡的圖片顯示! 我看到了與骨幹關係關係了一些答案,但仍然不明白了吧!

如何將此JSON轉換爲Backbone.js集合/模型?

我一個代碼更新,但它不工作像預期!我看不到一個模型時,我做的事:

我的結構是:

[0]:是的機型

集合

[譜號] + ... + [休閒]:是集的模型

(譜號)=> [0] + ... + [9]:是模型(標題包含字符串,路徑太)

非常感謝!!

EDIT(12年1月10日):

我的解決方案:

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幫我出去呢!

Nested Array

+0

您是否在尋找嵌套的骨幹模型/集合(這不是100%必要,取決於您的要求)。只需一個Backbone模型就可以獲得單個對象。 – 2012-01-09 00:10:05

+0

@trouble使用Backbone-Relational之後,我使用瞭解決方案(重寫解析)。與骨幹關係某些事件「添加」等沒有解僱並導致問題。感謝發佈! – greenimpala 2012-02-01 12:32:10

回答

17

我在工作,所以我不能給你一個完全編碼的答案,但要點是,你可以做你的頂級車型以下,實現了嵌套模型層次:

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酷我很樂意看到它,當你完成。

+0

是的,我的確如此:D!即時通訊完成後,我會告訴你!我在我的文章中更新了你的答案! – trouble 2012-01-09 08:26:29

0

reset的方法(see 'reset'),可以JSON數組傳遞到集合。 這相當於PUT方法,用JSON哈希代替指定的集合。

您還可以使用add方法添加到現有的集合,或通過JSON哈希到構造函數中創建一個新的集合。

你必須做你的陣列的一些基本清理讓它以適當的格式,然後convert it to JSON

+1

呵呵!我明白你的觀點!但這真的不幫助我構建真正的譜號集合,...,休息不是?我真的需要擁有它,就像我描述它一樣!只是糾正我,如果我錯了!謝謝! – trouble 2012-01-09 07:38:08

+0

我的壞!上面的圖片是JSON!對不起 – trouble 2012-01-09 09:17:31

0

我使用PHP搶進的JSON,因爲它是在不同的領域。我將這些結果保存到一個JS變量,然後我剛剛成功使用它將其放入我的Backbone集合中...

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