2013-07-04 3 views
5

Im essayant de comprendre la façon de sideload données à l'aide ember-modelUne bonne façon de sideload données avec Ember modèle

Je JSON revenir comme si (i aminci vers le bas un peu de la JSON réelle pour l'amour de l'espace ici)

{ 
    "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" 
     } 
     ] 
    } 
    ] 
} 

Dans mon modèle de la classe j'ai une propriété calculée comme si où je boucle sur les objets embarqués étudiants, de les charger dans les données transféré, puis utilisez le trouver pour les retirer.

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 pensant que this.get('students') peut ne pas être ce que les Msmapp.Student.load(students); attend. Je suppose qu'il attend des données dans un format brut et je ne suis pas 100% positif que this.get('students') est cela.

C'est ce que this.get('students') quand je 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 
] 

Et quand je déboguer le tableau studentObjects retourné je reçois des cours, mais ils ne semblent corrects

[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 
] 

Dans mon modèle j'ai quelque chose comme ce

<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> 

Je ne reçois aucun f les valeurs car il semble qu'elles ne sont pas configurées sur l'objet mais que le lien fonctionne correctement. J'imagine que c'est parce que l'identifiant est en train d'être défini.

les deux {{ student.first_name }} ou {{ first_name }} ne sont pas définis.

Répondre

6

Vos données ne sont pas construites correctement pour le chargement latéral. Pour le chargement de données, vous devez:

  1. Créer une clé supplémentaire au niveau le plus élevé de votre JSON retourné qui contient vos données à charger de côté. Dans l'exemple ci-dessous, j'ai créé une propriété "étudiants" au niveau le plus élevé de vos données renvoyées qui contenait tous les étudiants.
  2. Reportez-vous à ces éléments supplémentaires par clé dans chacun de vos objets principaux retournés. Dans l'exemple ci-dessous, j'ai changé la propriété "students" de chaque classe en "student_ids" et en ai fait un tableau d'ints qui se référait aux identifiants de chaque étudiant dans les données latérales.

Exemple:

{ 
    "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" 
    } 
    ] 
} 

Si vous construisez vos données de cette façon, Ember Les données doivent gérer les connexions ultra pour vous.

Plus d'infos here.

+0

Im utilisant le modèle de braises et non les données de braises. Je vais essayer ça pour voir si ça marche. – CoderStash

Questions connexes