4

Я ищу решение для загрузки вложенного json в родительской модели, которое в конечном итоге будет отображаться на экране. У меня есть вложенные JSON в этом формате:Вложенные модели и коллекция в backbonejs

{ 
    "name":"Hotel-A", 
    "description":"5 star rating", 
    "geographicAddress":{ 
     "streetAddress":"343,Market st", 
     "city":"San Jose", 
     "state":"CA", 
     "country":"USA", 
     "postalCode":"34523" 
    }, 
    "id":"338a947b-c488-46a9-b68f-640fcda38577" 
    } 

У меня есть родительская модель, которая дополнительно имеет отношение к geographicAddress и geographicPoint модели.

Вот как это выглядит:

родительскую модель:

defaults:{ 
    "id" : "", 
    "name" : "", 
    "description" : "", 
    "geographicAddress": new geoAddress(), 
} 

Родитель Коллекция:

addParentModel: function(parent) { 
     var newParentModel = new this.model(); 
     newParentModel.set({ 
       id: parent.id, 
       name: parent.name, 
       description: parent.description, 
       address:geoAddress.streetAddress, 
       city:geoAddress.city, 
       state:geoAddress.state, 
       postalCode:geoAddress.postalCode 

      }); 

географическая Адрес Модель:

defaults:{ 
      "streetAddress":"", 
      "city":"", 
      "state":"", 
      "country":"", 
      "postalCode":"" 
     } 

Может кто-то показать мне путь t o заполнить родительскую модель вложенным json и отобразить ее в html.

спасибо.

ответ

2

Я бы предложил переопределить функцию Backbone.Model parse, чтобы структурировать данные так, как вы хотите. Из документации Backbone:

Функция передается необработанный объект ответа, и должен возвращать атрибуты хэш должен быть установлен на модели. Реализация по умолчанию - - нет-op, просто проходя через ответ JSON. Переопределите это, если вам нужно работать с ранее существовавшим API или лучше использовать пространство имен ваших ответов .

var PlaceModel = Backbone.Model.extend({ 
    defaults: { 
    "id": "", 
    "name": "", 
    "description": "", 
    "geographicAddress": new AddressModel() 
    }, 
    parse: function(data) { 
    return { 
     id: data.id, 
     name: data.name, 
     description: data.description, 
     geographicAddress: new AddressModel(data.geographicAddress) 
    }; 
    } 
}); 

Я создал более полную демонстрацию, которая показывает создание моделей с использованием parse и затем делает коллекцию здесь: https://jsfiddle.net/f8L2z0ba/

+0

jsfiddle пример решает мой случай! :) Спасибо. – toddler

 Смежные вопросы

  • Нет связанных вопросов^_^