2015-09-14 2 views
0

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

На клиенте я делаю:

div.chat-discussion 
    each messages 
    +chatMessage 

Помощник является

Messages.find 
    conversationId: t.data.conversation._id 
, 
    sort: 
     createdAt: 1 

Поэтому я сортировка сообщения чата от самого старого до самого нового первого последнего.

чата выглядит следующим образом

enter image description here

Но всякий раз, когда я отправить сообщение, он не добавляется непосредственно к основанию.

Он добавлен в начало в течение нескольких миллисекунд, а затем сдвинут на дно.

Это делает UX чувствовать себя глюком. Почему это происходит, и как я могу это исправить?

UPDATE

я, казалось, исправили проблему путем удаления сортировки и просто возвращая сообщения в помощниках как

Messages.find 
    conversationId: t.data.conversation._id 

Так что, если я не сортировать на стороне клиента, сообщение автоматически добавляется в нижнюю часть списка сообщений, не мигая. Я не уверен, как и почему. По-моему, по умолчанию он сортируется по порядку самого старого.

+0

Интересная проблема. Ваше решение будет лучше размещено как ответ, но может быть непоследовательным в браузерах. Можете ли вы создать MeteorPad, чтобы показать это? –

+0

Как вы настраиваете созданный по значению элемент разговора? –

ответ

0

Я понял, что происходит ,

В конце концов, проблема заключалась в конфликте с сортировкой, которую я использовал, и как пакет timestampable (https://atmospherejs.com/zimme/collection-timestampable) добавляет поле createdAt.

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

Чтобы исправить это, я добавляю поле с именем sentAt при вставке, а теперь также сортировка по этому полю.

Это устранило проблему. Я пытался сортировать поле, которое не было при вставке. Это проявится в пользовательском интерфейсе, даже если поле добавляется сразу после вставки.

1

В коллекции, отличной от FIFO, нет сортировки по умолчанию, что означает, что пока вы не сортируете, записи отправляются так, как они были написаны.

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

Я полагаю, вы используете autopublish на сервере?

Вы должны написать свой собственный сервер publish и вернуть отсортированный список уже с сервера.

Так на клиенте, вы можете подписаться затем просто find() или сделать также вид на мини-Монго (предпочтительный)

Это должно предотвратить Glitchy UX

Приветствия

+0

Привет, Том, спасибо за ответ. Я не использовал autopublish. Я действительно понял это и опубликую свой ответ. – nearpoint

+0

Здравствуйте, @nearpoint, вы не написали, что использовали собственный метод публикации, а не тот, который использует этот временный пакет. Я действительно не могу поверить, что вам нужно это дополнительное поле 'sentAt'. Вы сохранили коллекцию в '/ lib'? Обычно это поле должно быть уже установлено на стороне miniMongo. –

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