2013-07-04 8 views
5

Im cercando di capire il modo corretto di sideload dati utilizzando ember-modelmodo corretto di sideload dati con brace modello

ho JSON tornando in questo modo (i dimagrito giù un po 'dal JSON reale per ragioni di spazio qui)

{ 
    "classrooms" : [ 
    { 
     "classroom_name" : "Class 1", 
     "id" : 1, 
     "teacher_id" : 3, 
     "grade" : 5, 
     "assignments" : [ 

     ], 
     "students" : [ 
     { 
      "id" : 5, 
      "last_name" : "Ford", 
      "first_name" : "Henry", 
      "district_id_number" : "MD454" 
     } 
     ] 
    }, 
    { 
     "classroom_name" : "Class 3", 
     "id" : 2, 
     "teacher_id" : 3, 
     "grade" : 4, 
     "assignments" : [ 
     { 
      "id" : 5, 
      "assignment_overview" : "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\r\n\r\nNam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.", 
      "assignment_title" : "Fractions", 
      "story" : null 
     } 
     ], 
     "students" : [ 
     { 
      "id" : 5, 
      "first_name" : "Henry", 
      "last_name" : "Ford", 
      "district_id_number" : "MD454" 
     }, 
     { 
      "id" : 3, 
      "first_name" : "Jake", 
      "last_name" : "Strong", 
      "district_id_number" : "WH6879" 
     }, 
     { 
      "id" : 6, 
      "first_name" : "Bryan", 
      "last_name" : "Dobson", 
      "district_id_number" : "B453" 
     } 
     ] 
    } 
    ] 
} 

nella mia classe modello che ho una proprietà calcolata in questo modo dove ho ciclo sugli oggetti incorporati studenti, caricarli nei dati sideloaded, quindi utilizzare il find per tirarli fuori.

classroomStudents: function() { 
    var studentObjects = [], 
     students = this.get('students'); 

    Msmapp.Student.load(students); 

    students.forEach(function(student) { 
     studentObjects.pushObject(Msmapp.Student.find(student.id)); 
    }); 

    return studentObjects; 
    }.property('students') 

Im pensando che this.get('students') potrebbe non essere quello che il Msmapp.Student.load(students); aspetta. Presumo che si aspetti i dati in un formato grezzo e Im non 100% positivo che sia this.get('students').

Questo è ciò che this.get('students') quando il debug

[Object 
    resource_document_ids: Array[0] 
    resource_ids: Array[0] 
    resource_image_ids: Array[0] 
    resource_video_ids: Array[0] 
    __proto__: Object 
     district_id_number: "MD454" 
     first_name: "Henry" 
     id: 5 
     resource_document_ids: Array[0] 
     resource_ids: Array[0] 
     resource_image_ids: Array[0] 
     resource_video_ids: Array[0] 
     __proto__: Object 
,Object 
,Object 
] 

E quando il debug del restituita studentObjects serie ottengo classi, ma essi non sembrano essere corrette

[Class 
    __ember1372909895769: undefined 
    __ember1372909895769_meta: Meta 
    _super: undefined 
    data: Object 
    isLoaded: true 
    isNew: false 
    __proto__: Object 
    id: 5 
    resource_document_ids: Array[0] 
    resource_ids: Array[0] 
    resource_image_ids: Array[0] 
    resource_video_ids: Array[0] 
    __proto__: Object 
    __defineGetter__: function __defineGetter__() { [native code] } 
    __defineSetter__: function __defineSetter__() { [native code] } 
    __lookupGetter__: function __lookupGetter__() { [native code] } 
    __lookupSetter__: function __lookupSetter__() { [native code] } 
    constructor: function Object() { [native code] } 
    hasOwnProperty: function hasOwnProperty() { [native code] } 
    isPrototypeOf: function isPrototypeOf() { [native code] } 
    propertyIsEnumerable: function propertyIsEnumerable() { [native code] } 
    toLocaleString: function toLocaleString() { [native code] } 
    toString: function toString() { [native code] } 
    valueOf: function valueOf() { [native code] } 
    isLoaded: true 
    isNew: false 
, Class 
, Class 
] 

Nel mio modello ho qualcosa di simile questo

<ul> 
    {{#if classroomStudents }} 
    {{#each student in classroomStudents }} 
     <li class="listed_item micro"> 
     {{#linkTo "classroom_student" student }} 
      <div class='title'>{{ student.first_name }}</div> 
     {{/linkTo}} 
     </li> 
    {{/each}} 
    {{ else }} 
    <li class="item"> 
    {{#linkTo "classroom.new_student" classNames='header_link tooltip'}} 
     No students assigned 
    {{/linkTo}} 
    </li> 
    {{/if}} 
</ul> 

Im non ottenere alcuno o f i valori fuori perché sembra che non vengano impostati sull'oggetto ma il linkto funzioni correttamente. Lo immagino perché l'ID viene impostato.

entrambi {{ student.first_name }} o {{ first_name }} non sono definiti.

risposta

6

I dati non sono stati creati correttamente per il caricamento laterale. Per caricare i dati a parte, è necessario:

  1. Creare una chiave aggiuntiva al livello più alto del JSON restituito che contiene i dati per il caricamento laterale. Nell'esempio seguente, ho creato una proprietà "studenti" al di fuori del livello più alto dei dati restituiti che contenevano tutti gli studenti.
  2. Fare riferimento a questi elementi aggiuntivi mediante la chiave in ciascuno degli oggetti principali restituiti. Nell'esempio seguente, ho modificato la proprietà "studenti" di ogni classe in "student_ids" e ne ho ricavato una serie di valori che si riferivano agli ID di ogni studente nei dati caricati lateralmente.

Esempio:

{ 
    "classrooms" : [ 
    { 
     "classroom_name" : "Class 1", 
     "id" : 1, 
     "teacher_id" : 3, 
     "grade" : 5, 
     "assignments" : [ 

     ], 
     "student_ids" : [ 5 ] 
    }, 
    { 
     "classroom_name" : "Class 3", 
     "id" : 2, 
     "teacher_id" : 3, 
     "grade" : 4, 
     "assignments" : [ 
     { 
      "id" : 5, 
      "assignment_overview" : "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\r\n\r\nNam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.", 
      "assignment_title" : "Fractions", 
      "story" : null 
     } 
     ], 
     "student_ids" : [ 5, 3, 6] 
    } 
    ], 
    "students" : [ 
    { 
     "id" : 5, 
     "first_name" : "Henry", 
     "last_name" : "Ford", 
     "district_id_number" : "MD454" 
    }, 
    { 
     "id" : 3, 
     "first_name" : "Jake", 
     "last_name" : "Strong", 
     "district_id_number" : "WH6879" 
    }, 
    { 
     "id" : 6, 
     "first_name" : "Bryan", 
     "last_name" : "Dobson", 
     "district_id_number" : "B453" 
    } 
    ] 
} 

Se si preparano i dati in questo modo, Ember dati dovrebbe gestire i collegamenti per voi.

Ulteriori informazioni here.

+0

Im usando ember-model non ember-data. Darò questo a vedere se funziona. – CoderStash

Problemi correlati