2012-10-09 51 views
5

Me gustaría ver algunos datos de contacto (nombre, correo electrónico, ...) agrupados por departamento, pero no puedo lograrlo con los manubrios.Ember.js: Cómo ver los datos de Ember.Map

  • Departamento X

    • Datos de contacto x1
    • Datos de contacto x2
    • ...
  • Departamento Y

    • Datos de contacto y1
    • Datos de contacto y2
    • ...

No sé cuántos departamentos tengo de antemano. Entonces, en mi controlador traté de cargar información en un Ember.Map donde los departamentos son sus claves y la matriz con información de contactos es el valor para cada departamento. Es algo como esto:

map = Ember.Map.create(); 
// Load data from server into map 
// m = {'Department X': [{name:'x1','email':'emailx1',...},{...}], 'Department Y':[....], ...} 

{{#each department in map}} 
    {{department}} 
    {{#each contact in map.keys}} 
     {{contact.name}} | {{contact.email}} 
    {{#each}} 
{{#each}} 

genera un error diciendo que "contenido de un EmberCollectionView debe implementar Ember.Array Pasaste [object Object]". ¿Es posible lograr suh una tarea con datos anidados? Cualquier ayuda será bienvenida. Gracias.

Respuesta

5

¿Qué pasa con la creación de una clase Departamento de la siguiente manera:

App.Department = Ember.Object.extend({ 
    name: null 
    contacts: null // will be an array of App.Contact 
}) 

y una clase de contacto de esta manera:

App.Contact = Ember.Object.extend({ 
    name: null, 
    email: null, 
}) 

Al cargar los datos, se podría simplemente construir un conjunto de departamentos

App.departments = []; 

// parse the arriving json and populate the departments array 
App.departments.pushObject(
    App.Department.create(
     {name: dptLoadedName, contacts: [App.Contact.create({...})]} 
    ) 
) 

Por lo tanto, en su plantilla, podría hacer algo como:

{{#each department in App.departments}} 
    {{department.name}} 
    {{#each contact in department.contacts}} 
    {{contact.name}} | {{contact.email}} 
    {{#each}} 
{{#each}} 
+0

¡Perfecto! Mientras esperaba una respuesta, estaba intentando exactamente eso y funciona perfectamente. Estaba intentando usar Ember.Map porque vengo del universo de Java y solía realizar esa tarea con Map en mis plantillas. Un millón de gracias – erbihanka