2016-10-25 2 views
0

Я хочу отсортировать список пользователей (по имени) в моем приложении. Когда я вхожу в систему с любым пользователем, тогда этот пользователь помещается в верхнюю часть списка.Meteor - сортировка (Текущий пользователь всегда находится в начале списка)

Пример, у меня есть данные, как показано ниже:

[ 
    {name: "phat 1"}, 
    {name: "phat 3"}, 
    {name: "phat 2"} 
] 

Когда я логин с "Phat 3", и performt вида, результат:

[ 
    {name: "phat 3"}, 
    {name: "phat 1"}, 
    {name: "phat 2"} 
] 

Когда я логин с "Phat 2" и performt рода, результат:

[ 
    {name: "phat 2"}, 
    {name: "phat 1"}, 
    {name: "phat 3"} 
] 

Это мой код:

// server 
Meteor.publish('users', function (options: Options) { 
    return Users.find({}, options); 
}); 
// Client 
const options: any = { 
    sort: { 'name': 1} 
}; 
MeteorObservable.subscribe('users', options).subscribe(() => { 
    let data = Users.find({}).fetch(); 
}); 

Кто-то мне помогает, Большое спасибо!

+0

Вам необходимо отсортировать его на стороне клиента. сортировки в публикации недостаточно. – Luna

+0

Но, как мы можем искать с несколькими условиями и сочетаться с поиском, поисковым вызовом .... –

+0

Вам нужно быть более конкретным с вашим вопросом ... Поскольку он слишком широк на данный момент. Объясните, что именно вы пытаетесь достичь, и что вы пробовали/сделали до сих пор, редактируя свой вопрос. – Luna

ответ

0

Я читаю этот вопрос: «Я хотел бы, чтобы отобразить список пользователей, отсортированных по имени, но всегда место текущего пользователя на . верхняя

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

HTML:

<template name="userList"> 
{{#with currentUser}} 
    {{name}} 
{{/with}} 
{{#each otherUsers}} 
    {{name}} 
{{/each}} 

ЯШ:

Template.userList.helpers({ 
    currentUser(){ return Meteor.user() }, 
    otherUsers(){ 
    return Meteor.users.find({ _id: { $ne: Meteor.userId() }},{ sort: { name: 1 }}); 
    } 
}); 

Если макет для каждого пользователя осложнена, то это легко использовать вложенный шаблон для отображения каждого пользователя.

+0

Привет @Michel Floyd, таким образом, доза не работает, я думаю, что я использую автозапуск для синхронных данных. 'MeteorObservable.subscribe ('users', options, searchText) .subscribe (() => { MeteorObservable.autorun(). zone(). subscribe(); }) ' –

+0

Он будет работать после того, как данные будут готовы, вы можете' {{#if}} 'весь шаблон ждать данных. –

+0

спасибо Мишель Флойд: D –

0

Вы можете просто отсортировать его по своему вошедшему ид,

Users.find().fetch().sort(function(a, b){ 
    return b._id == Meteor.userId(); 
}); 
+0

В моем примере только сортировать по имени, но на самом деле я хочу сортировать по чему-то и многое другое .... Спасибо в любом случае –

+0

'phat 3' это имя в коллекции пользователей – Gemmi

+0

да, оно сочетается с 'meteor/accounts-base', и это моя коллекция –