2016-03-18 3 views
0

Я пытаюсь сортировать массив и не иметь большой удачи. Если я удалю helper, я распечатаю все квалификации в том порядке, в котором они попали в базу данных. Я хотел бы показать их в хронологическом порядке на основе их startDate.Сортировка массива на основе startDate

Путь: dbExample

"profile": { 
    "CV": { 
     "education": [ 
     { 
      "qualification": "Arts Degree", 
      "startDate": "2009-01-01T00:00:00.000Z", 
      "endDate": "2013-12-01T00:00:00.000Z" 
     }, 
     { 
      "qualification": "Science Degree", 
      "startDate": "2007-01-01T00:00:00.000Z", 
      "endDate": "2008-12-01T00:00:00.000Z" 
     } 
     ] 
    } 
} 

Путь: education.html

<template name="education"> 
    {{#each educationHistory}} 
    <div class="box"> 
     <p class="title">{{qualification}}</p> 
     <p class="dates">{{startDate}} - {{endDate}}</p>     
    </div> 
    {{/each}} 
</template> 

Путь: education.js

Template.education.helpers({ 
    educationHistory: function() { 
     return Meteor.users.find({}, {sort: {"startDate": 1}});  
    } 
}); 

Путь: Schema.js

Schema.Education = new SimpleSchema({ 
    qualification: { 
     type: String, 
     optional: true  
    }, 
    startDate: { 
     type: Date, 
     optional: true 
    }, 
    endDate: { 
     type: Date, 
     optional: true 
    } 
}); 

Schema.CV = new SimpleSchema({ 
    education: { 
     type: [Schema.Education], 
     optional: true 
    } 
}); 
+0

Как связаться с вами и друзьями? Показывать простую схему стала популярной в вопросах в последнее время, но я считаю, что примерный документ будет более полезным. –

+0

Привет, Дэвид. Извините мой вопрос noob, но когда вы говорите примерный документ, вы имеете в виду mongoDB. Если да, то как вы порекомендуете мне написать? – bp123

+0

Если это то, что вы имели в виду, я добавил пример mongoDB, который я вытащил из метеоритов. Надеюсь, это то, что вы хотели. – bp123

ответ

2

Это немного сложно, потому что я не знаю контекста шаблона или истории использования пользователя. Вот несколько идей решения:

раствор 1

Template.education.helpers({ 
    educationHistory: function() { 
    // replace Meteor.user() with Meteor.users.findOne(someId) or something 
    const { education } = Meteor.user().profile.CV; 
    return _.sortBy(education, e => e.startDate); 
    }, 
}); 

Это возвращает массив объектов образования, отсортированный по startDate.

раствор 2

Если шаблон уже есть educationHistory без помощника (на основе ваших комментариев ниже), то вы можете заменить educationHistory помощника с этим:

Template.education.helpers({ 
    sortByStartDate: function (education) { 
    return _.sortBy(education, e => e.startDate); 
    }, 
}); 

Затем в template:

<template name="education"> 
    {{#each sortByStartDate educationHistory}} 
    <div class="box"> 
     <p class="title">{{qualification}}</p> 
     <p class="dates">{{startDate}} - {{endDate}}</p> 
    </div> 
    {{/each}} 
</template> 
+0

Спасибо, Дэвид, когда я использую это, он печатает одну дату несколько раз без какой-либо другой информации. Что-то не так с моими рулями? – bp123

+0

Это также необходимо исправить. Арг, я думаю, что я все еще не понимаю вопроса ... Итак, вы хотите, чтобы все истории образования для всех пользователей или просто история для одного (текущего?) Пользователя? –

+0

Для одного пользователя. Его ссылка на ID в URL. Это второй шаблон, на который ссылаются. Если я полностью удалю помощника, он просто не сортируется. Имеет ли это смысл? – bp123

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