2013-04-06 6 views
0

У меня есть API, который производит данные GeoJSON из нескольких объектов и событий, которые происходят на каждом объекте.Магистраль: создание моделей из коллекции моделей, содержащих коллекцию моделей

См пример вывода:

{ 
    "crs":null, 
    "type":"FeatureCollection", 
    "features":[ 
     { 
     "geometry":{ 
      "type":"Point", 
      "coordinates":[ 
       -122.330056, 
       47.603828 
      ] 
     }, 
     "type":"Feature", 
     "id":39, 
     "properties":{ 
      "city_slug":"seattle", 
      "neighborhood_name":"Downtown", 
      "events__all":[ 
       { 
        "category__category":"Gallery", 
        "eventid":16200847, 
        "description":"A Wider View, curated by Onyx Fine Arts Collective, features 60 works by 23 artists of African descent.", 
        "title":"A Wider View", 
        "cost":"Free", 
        "category__slug":"gallery", 
        "slug":"a-wider-view" 
       } 
      ], 
      "venue_name":"City Hall Lobby Gallery", 
      "venue_address":"600 4th Avenue, Seattle, WA 98104, USA", 
      "city_name":"Seattle", 
      "neighborhood_slug":"downtown", 
      "venue_slug":"city-hall-lobby-gallery" 
     } 
     }, 
     { 
     "geometry":{ 
      "type":"Point", 
      "coordinates":[ 
       -122.348512, 
       47.6217233 
      ] 
     }, 
     "type":"Feature", 
     "id":42, 
     "properties":{ 
      "city_slug":"seattle", 
      "neighborhood_name":"Downtown", 
      "events__all":[ 
       { 
        "category__category":"Museums", 
        "eventid":15455000, 
        "description":"The Art of Video Games tackles a 40-year history, with a focus on video game as art form. Nerdy heartstrings will be tugged in this nostalgia-inducing retrospective, including everything from the Atari VCS to Playstation 3.", 
        "title":"The Art of Video Games", 
        "cost":"$20", 
        "category__slug":"museums", 
        "slug":"the-art-of-video-games" 
       }, 
       { 
        "category__category":"Museums", 
        "eventid":15213972, 
        "description":"There's just something about the black leather jacket. It's a garment that invariably comes with context, that cannot help but be an icon. Worn to Be Wild: The Black Leather Jacket explores the evolution of the leather jacket from \"protective gear to revolutionary garb.\"", 
        "title":"Worn to Be Wild: The Black Leather Jacket", 
        "cost":"$20", 
        "category__slug":"museums", 
        "slug":"worn-to-be-wild-the-black-leather-jacket" 
       } 
      ], 
      "venue_name":"Experience Music Project | Science Fiction Museum.", 
      "venue_address":"325 5th Avenue North, Seattle, WA 98109, USA", 
      "city_name":"Seattle", 
      "neighborhood_slug":"downtown", 
      "venue_slug":"experience-music-project-science-fiction-museum" 
     } 
     } 
    ], 
    "bbox":[ 
     -122.348512, 
     47.6035448, 
     -122.3233742, 
     47.6217233 
    ] 
} 

Я хочу, чтобы отобразить это в коллекции под названием VenueEvents. VenueEvents содержит модели под названием JsonVenues, и каждый из этих объектов затем содержит коллекцию под названием EventSet, содержащую ряд моделей Event (боковая тема: называет модель «Событие» рецептом катастрофы?).

Мои модели описаны как таковые:

var Event = Backbone.Model.extend({ 
    parse: function(response){ 
    return { 
     id: response.eventid, 
     slug: response.slug, 
     title: repsonse.title, 
     description: response.description, 
     category: response.category__category, 
     cost: response.cost 
    } 
    } 
}); 

var EventSet = Backbone.Collection.extend({ 
    model: Event, 
    } 
}); 

var JsonVenue = Backbone.Model.extend({ 
    initialize: function(attributes) { 
    console.log(attributes) 
    }, 
    parse: function(response){ 
    // var eventSet = new EventSet(response.properties.events__all); 
    return { 
     name: response.properties.venue_name, 
     address: response.properties.venue_address, 
     neighborhood: response.properties.neighborhood_name, 
     //eventSet: eventSet 
    } 
    } 
}); 

// Is this actually a model? 
var VenueEvents = Backbone.Collection.extend({ 
    model: JsonVenue, 
    url: '/json/', 
    parse: function(response){ 
    return response.features; 
    } 
}); 

В VenueEvents и JsonVenue объекты получают созданы, как и ожидалось, за исключением того, что response.properties.events__all объект не кажется, делают это путь к JsonVenue модели (которая где я бы хотел использовать его для создания коллекции EventSet). Я поместил console.log(attributes) в параметр initialize объекта JsonVenue, и он показывает, что, хотя все остальные значения в пределах features.propertiesJsonVenue пробиваются к модели, events__all этого не делает.

Есть ли причина, почему это происходит? Является ли этот способ загрузки вложенных данных JSON в модели даже возможными? В большинстве примеров люди включают только id вложенного объекта в свой вывод JSON, а затем (я предполагаю) построю модель из этого объекта в другой строке JSON и связывая их на основе идентификатора. Похоже, для этого потребуется больше трафика между сервером и клиентом. Я также вижу данные о загрузке сторонних пользователей, является ли это рекомендуемым методом сопоставления моделей в одном вызове API?

Спасибо!

+0

Вы действительно используете Backbone-relational (в качестве плагина Backbone)? Вы помещаете его в теги. Это может быть интересно для вас, если вы загружаете все сразу. Что касается вашей проблемы, никто вам не отвечает, я посмотрю, когда у меня будет время. – Loamhoof

ответ

1

Ну .. Ive просто попробовал ваш код, используя:

new VenueEvents(json, {parse: true}); 

создать свою коллекцию. И ... it works just fine it seems ...

Все еще, Backbone-relational может иметь поведение, которое вы хотите упростить код (это только предположение, я никогда не тестировал его сам и не смотрел на него).

+0

Вы совершенно правы. По-видимому, он работает так, как ожидалось. Это заставило меня понять, что поток JSON, который я получал, фактически не имел в нем EventSet (необходимо передать параметр с запросом на получение). Спасибо за помощь в поиске и устранении неисправностей! – alukach