Структура базовых моделей и коллекций на основе JSON

У меня есть это веб-приложение, которое отслеживает ежедневное потребление питательных веществ через продукты и представляет их в четкой временной шкале.

Я новичок в Backbone и пытаюсь структурировать свои модели и коллекции. Как я могу смоделировать следующий JSON в моделях/коллекциях Backbone?

Должна ли это быть коллекция foods внутри модели day?

{
      response: [
        { // a random day
          date: '1/1/2011',
          totalCalories: 1000,
          totalCarbs: 100,
          totalProtein: 60,
          totalFats: 30,
          foods: [
            { // a food consumed in this day
              datetime: '1/1/2011 17:30',
              calories: 500,
              proteins: 30,
              carbs: 50,
              fats: 15,
              img: 'link_to_img'
            },
            {
              datetime: '1/1/2011 19:30',
              calories: 500,
              proteins: 30,
              carbs: 50,
              fats: 15,
              img: 'link_to_img'
            }
          ]
        },
        { // another day
          date: '3/1/2011',
          totalCalories: 1000,
          totalCarbs: 100,
          totalProtein: 60,
          totalFats: 30,
          foods: [
            {
              datetime: '3/1/2011 17:30',
              calories: 500,
              proteins: 30,
              carbs: 50,
              fats: 15,
              img: 'link_to_img'
            },
            {
              datetime: '3/1/2011 19:30',
              calories: 500,
              proteins: 30,
              carbs: 50,
              fats: 15,
              img: 'link_to_img'
            }
          ]
        }
      ]
}

person Kostas Dimakis    schedule 09.09.2017    source источник
comment
DaysCollection› Model› FoodsArray/FoodsCollection. Должны ли продукты быть массивом или базовой коллекцией, зависит от вашего приложения. если вам не нужно выполнять какие-либо операции, связанные с магистралью, это не обязательно должна быть коллекция. Обратите внимание, что магистраль не поддерживает вложенные коллекции или модели. Таким образом, вы должны обрабатывать такие вещи, как распространение событий, если вы вкладываете магистральные объекты. Я бы оставил продукты в виде массива для простоты   -  person T J    schedule 11.09.2017


Ответы (1)


Если у вас есть JSON, вы можете создать коллекцию и модель

Создание модели

var myModel = Backbone.Model.extend({});

Создание коллекции

var myCollection = Backbone.Collection.extend({
  model: myModel
});

var ourCollection = new myCollection(yourJSON);

В вашем примере я создам 2 коллекции (1 вложенная в модель) CollectionOfDays -> ModelOfDay -> CollectionOfFoods (внутри модели)

var randomDay = Backbone.Model.extend({});
var randomDayCollection = Backbone.Collection.extend({
  model: randomDay
});

var collection = new randomDayCollection(yourJSON);

модель в коллекции имеет атрибуты:

date: '1/1/2011',
totalCalories: 1000,
totalCarbs: 100,
totalProtein: 60,
totalFats: 30,
foods: [Array] -food consumed in day

После этого вы можете создать другую модель для одной коллекции продуктов питания и продуктов и перезаписать свои продукты.

person Przemek eS    schedule 11.09.2017