2015-09-21 2 views
3

Если у меня есть массив JSON, который выглядит Liket он следующий ..Создать Перегородки в Aurelia

{ 
"error":false, 
"events":[ 
    { 
    "id":1, 
    "title":"First entry", 
    "date":"2014-11-04" 
    }, 
    { 
    "id":2, 
    "title":"Second entry", 
    "date":"2014-11-04" 
    }, 
    { 
    "id":3, 
    "title":"Third entry", 
    "date":"2014-11-05" 
    }, 
    { 
    "id":4, 
    "title":"Fourth entry", 
    "date":"2014-11-06" 
    }, 
    { 
    "id":5, 
    "title":"Fifth entry", 
    "date":"2014-11-06" 
    } 
] 
} 

Как создать дату делителей в повторе, так что DOM выглядит такое ..

2014 -11-04
Первая запись
Вторая запись

2014-11-05
Третья запись

2014-11-06
Четвертая запись
Пятая запись

+0

Вы хотите просто сгруппировать свои данные? –

+0

Да, и нет. Я хочу, чтобы он был сгруппирован, что я сделал с функцией сортировки. Но я также хочу показать, с чем он сгруппирован. Каждый заголовок должен сообщить пользователю, в какой группе находится запись. –

ответ

3

Я бы просто сгруппировать данные в массиве.

@bindable events = []; 
groupedEvents = []; 

eventsChanged(newValue) { 
    let matchedGroup; 
    // clear the array 
    this.groupedEvents = this.groupedEvents.splice(0, this.groupedEvents.length) 
    newValue.forEach(event => { 
    let match = this.groupedEvents.filter(group => { 
     return group.name === event.date; 
    })[0]; 
    if (!match) { 
     matchedGroup = { name: event.date, events: [] }; 
     this.groupedEvents.push(matchedGroup);  
    } 
    matchedGroup.events.push(event); 
    }); 
} 

и по вашему мнению, вы можете перебирать группы -

<template repeat.for="group of groupedEvents"> 
    <h1>${group.name}</h1> 
    <ul> 
    <li repeat.for="event of group.events">${title}</li> 
    </ul> 
</template> 

группировка JavaScript в основном набившие оскомину ES6 + код и, вероятно, может быть немного более эффективным, но это должно дать вам старт ,

+0

Brilliant & Elegant :) –

+0

Почему вы используете сращивание для очистки массива? (У меня есть несколько вопросов, и я не уверен, что полностью понимаю, что там происходит) Мне также пришлось поставить 'let matchedGroup' вне цикла forEach, иначе с каждым событием, которое оно было очищено, и событием не будет добавлять к этому массиву matchedGroup. –

+0

Я не думаю, что вы хотите повторно назначить значение массива, если вы можете помочь ему, чтобы вы не нарушили никаких наблюдателей. Вы правы, что согласованная группа должна быть определена вне цикла (я никогда не тестировал код :)) –