2013-07-02 60 views
1

我想構建一個酒店和房間的應用程序。
每個酒店能有更多的房間,我檢索XML中的外部服務器這個數據,我分析它,現在我已經分成兩個數組:酒店和房間是這樣的:
hotel.json骨幹如何正確構建json

[ 
    { 
    "id": "1", 
    "name": "Hotel1" 
    }, 
    { 
    "id": "2", 
    "name": "Hotel2" 
    }, 
    { 
    "id": "3", 
    "name": "Hotel3" 
    } 
] 

房.json

[ 
    { 
    "id" : "r1", 
    "hotel_id" : "1", 
    "name" : "Singola", 
    "level" : "1" 
    }, 
    { 
    "id" : "r1_1", 
    "hotel_id" : "1", 
    "name" : "Doppia", 
    "level" : "2" 
    }, 
    { 
    "id" : "r1_3", 
    "hotel_id" : "1", 
    "name" : "Doppia Uso singol", 
    "level" : "1" 
    }, 
    { 
    "id" : "r2", 
    "hotel_id" : "2", 
    "name" : "Singola", 
    "level" : "1" 
    }, 
    { 
    "id" : "r2_1", 
    "hotel_id" : "2", 
    "name" : "Tripla", 
    "level" : "1" 
    } 
] 

進入我的骨幹應用程序,我必須做一些控制器和一些解析來檢索其酒店的房間。
我想知道,如果是更好地爲骨幹,構建一個JSON這樣的:

[ 
     { 
     "id": "1", 
     "name": "Hotel1", 
     "rooms": [ 
       { 
        "id" : "r1", 
        "hotel_id" : "1", 
        "name" : "Singola", 
        "level" : "1" 
       }, 
       { 
        "id" : "r1_1", 
        "hotel_id" : "1", 
        "name" : "Doppia", 
        "level" : "2" 
       } 
       ] 

     }, 
     { 
     "id": "2", 
     "name": "Hotel2", 
     "rooms": [ 
       { 
        "id" : "r2", 
        "hotel_id" : "2", 
        "name" : "Singola", 
        "level" : "1" 
       }, 
       { 
        "id" : "r2_1", 
        "hotel_id" : "1", 
        "name" : "Doppia", 
        "level" : "2" 
       } 
       ] 
     }, 
     { 
     "id": "3", 
     "name": "Hotel3" 
     } 
    ] 

這是對骨幹網的效率和解析方面更好的模式? 我想到了第一個案例,但構建應用程序後,我不知道。

+0

也對此感興趣,因爲剛剛接觸骨幹,我最終得到了分離集合,只因爲我可以早期從視圖中偵聽事件,而不依賴於其他模型的構造。 – DRC

回答

1

我會建議保持數據結構平坦,因爲Backbone並不真正支持嵌套集合而無需額外的工作。使數據模型保持平坦還將使您更容易映射到REST端點(即「/ hotels/1/rooms」,「rooms/1」等)。

只是爲了演示的複雜性,這裏是怎麼一會要收集到的模型相關聯的例子:

HotelModel = Backbone.Model.extend({ 
    initialize: function() { 
     // because initialize is called after parse 
     _.defaults(this, { 
      rooms: new RoomCollection 
     }); 
    }, 
    parse: function(response) { 
     if (_.has(response, "rooms")) { 
      this.rooms = new RoomCollection(response.rooms, { 
       parse: true 
      }); 
      delete response.rooms; 
     } 
     return response; 
    }, 
    toJSON: function() { 
     var json = _.clone(this.attributes); 
     json.rooms = this.rooms.toJSON(); 
     return json; 
    } 
}); 

配有一臺數據結構,你可以做這樣的事情:

HotelModel = Backbone.Model.extend({ 
    idAttribute:'hotel_id', 
    urlRoot:'/hotels' 
}); 
RoomModel = Backbone.Model.extend({ 
    idAttribute:'room_id', 
    urlRoot:'/rooms' 
}); 

HotelCollection = Backbone.Collection.extend({ 
    url: '/hotels', 
    model:HotelModel 
}); 
RoomCollection = Backbone.Collection.extend({ 
    url: '/rooms', 
    model:RoomModel, 
    getByHotelId: function(hotelId){ 
     return this.findWhere({hotel_id:hotelId}); 
    } 
}); 
+0

如果您看到問題這個問題,我不能走出去是我的問題的第二部分。 http://stackoverflow.com/questions/17417589/recursive-function-jquery-with-backbone –

+0

但是你的問題很好開始解析數據,我跟着你去分開我的json tohave平面數組。 +1爲偉大的答案 –

+0

很高興我能幫上忙。我不確定我是否理解,但「不能出去」。 –