@slavagoreev

Meteor.js: почему дублируются элементы?

Добрый день,
Беспокоит проблема - уже руки опускаются. Создаю проект на Meteor.js. Использую библиотеку nestedSortable для создания вложенного списка, с drag`n`drop элементами. При изменении структуры списка идет обновление поля sort в базе данных в формате JSON, наподобие [{"id":"1417619247009","children":[{"id":"1417619241424"}]}].

После, из которого восстанавливается список в нужной сортировке, с помощью рекурсивной функции, которая работает и возвращает корректный результат.
Самое интересное, что когда я использую базу данных и вытаскиваю задание из вложенного списка на уровень ниже, то он просто дублируется, что довольно странно, ведь в шаблон идет корректная информация. Вот пример дупликации:
f3143e977b7843d7a83cd0ee5c598b33.gif
Самое интересное то, что если убрать обновление сортировки в бд, то все работает корректно)
e43e9f930b114e3dbf849a3bd199ac56.gif
Приведу немного кода, чтобы было понятнее))
Template.item.helpers({
    tasklist: function () {
        if (Meteor.user()) {
            var task = null,
                result = [],
                sorting = null;
            if (Meteor.user().sort) {
                task = Task.find({user_id: Meteor.userId()}).fetch()
                sorting = JSON.parse(Meteor.user().sort);
                sorting.forEach(function(current_item) {
                    //Рекурсивная функция здесь
                    var nested = taskFilter (current_item, task);
                    result.push (nested);
                });
            }
            else {
                return task;
            }
            return result;
        }
    }
});
function taskFilter (item, all) {
    var result = [];
    $.map(all, function (task) {
        if (task.id == item.id) {
            if (item.children) {
                task.children = []
                item.children.forEach(function(child) {
                    var children = taskFilter (child, all);
                    task.children.push (children);
                    //console.log (result);
                });
            }
            return result = task;
        }
    });
    return result;
}

<template name="item">
    {{#each tasklist}}
        {{>taskitem}}
    {{/each}}
</template>
<template name="taskitem">
    <li class="task-item">
        ....
        {{#if children}}
            <ul>
                {{#each children}}
                    {{>taskitem}}
                {{/each}}
            </ul>
        {{/if}}
    </li>
</template>

Надеюсь на вашу помощь.
P.S. возможно за небольшую плату, например, 500 рублей. Пишите здесь или на мыло admin@reespace.ru.
  • Вопрос задан
  • 2516 просмотров
Пригласить эксперта
Ответы на вопрос 2
@bagzon
Backend PHP, NodeJs, JS
А если включить обновление в БД, а потом сортирнуть, увидеть что задублировалось, и рефрешнуть страницу, все будет как пологается, на своих местах? Если так, то юзаешь ли subscribe/publish? если да, то может быть идет недосенхренизация с локальным хранилещем mongo и серверной?
Ответ написан
AMar4enko
@AMar4enko
Вот поэтому никак не могу себя заставить метеором заняться - как вот на такие вопросы ответы искать? Жить на их форумах?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 400 000 до 700 000 ₽
Idea Platform Москва
от 120 000 до 200 000 ₽
Leningrad Media Москва
от 150 000 до 170 000 ₽
16 апр. 2024, в 10:47
80000 руб./за проект
16 апр. 2024, в 10:41
1000 руб./за проект
16 апр. 2024, в 10:39
2000 руб./за проект