2013-07-02 4 views
1

호텔 및 객실 앱을 만들고 싶습니다.
모든 호텔보다 객실을 가질 수 있습니다, 내가 XML 외부 서버에서이 데이터를 검색, 나는 그것을 분석하고 지금은 두 개의 배열로 구분 한이 같은 호텔 객실 :
hotel.json백본 올바르게 json을 구성하는 방법

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

객실 내 백본 앱에

[ 
    { 
    "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 좀 컨트롤러와 호텔의 객실을 검색하는 몇 가지 구문 분석을해야한다.
내가 백본 그 같은 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

하지만 귀하의 질문은 데이터를 구문 분석하기 시작하는 것이 좋습니다, 그리고 난 mantain 별도의 내 json 평면 배열을 따라야합니다. 위대한 답을 얻으려면 +1 –

+0

기꺼이 도와 드리겠습니다. 나는 이해할 수 없다. "나갈 수 없다". –

관련 문제