JQuery .sortable () работает только после обновления страницы - PullRequest
1 голос
/ 09 января 2020

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

private sortableOptions = {
    JSPA: this,
    delay: 50,
    group: "favourites",
    connectWith: ".sel-favourite-groups",
    vertical: false,
    itemSelector: "app-favourite",
    placeholder: "<li class='placeholder favourite list-group-item' style=''></li>",
    tolerance: 15,
    onDrop: this.sortDrop,
    onDragStart: this.sortDragStart
};


$list.sortable(this.sortableOptions);

Это, однако, работает, если я обновлю sh страницу (нажмите f5 и c).

Когда не работает (при загрузке первой страницы) ) я вижу, что элементы списка являются подвижными (вы можете щелкнуть и перетащить их), событие onDragStart срабатывает, а событие onDrop срабатывает. Однако при их перемещении заполнитель не отображается, а другие элементы не меняют положение. При отбрасывании движущийся элемент просто возвращается в исходное положение.

Соответствующий полный код:

private render(): JQuery {
        let $page = this.getTemplate("home");

        let $list = $page.find("#home-favourites");
        $list.sortable(this.sortableOptions);

        try {
            for (let f = 0; f < this.user.UserSettings.favourites.sites.length; f++) {
                this.drawFavourite($list, this.user.UserSettings.favourites.sites[f]);
            }

            // and do the same for the groups
            for (let g = 0; g < this.user.UserSettings.favourites.groups.length; g++) {
                let group = this.user.UserSettings.favourites.groups[g];
                // add the header and list to the DOM
                let $list = this.drawFavouriteGroup(group);
                $list.sortable(this.sortableOptions);

                if (group.state == "minimised") {
                    let $li = $list.parent();
                    this.drawMinimisedFavouriteGroup($li, group.name);
                    $li.addClass("collapse");
                }

                for (let f = 0; f < group.sites.length; f++) {
                    this.drawFavourite($list, group.sites[f]);
                }
            }
        }
        catch (ex) {
            console.log("EXCEPTION:: Home.render(): ", ex);
        }

        return $page;
    }

Из рассмотрения других подобных проблем (обычно это JQuery things DON ' T работать после refre sh) Я уже пробовал:

  • Добавление всего в DOM с последующим вызовом .sortable()
  • Вызов .sortable('refresh')
  • Упрощение код, так что вышеприведенные «группы» (несколько <ul /> не включены

Ничего из этого не имеет значения - никогда не работает при первой загрузке, всегда работает после обновления страницы sh

Также переход от страницы к странице и обратно означает, что .sortable() не работает.

Я не могу понять, как refre sh может заставить его работать, не должен начальная загрузка страницы при переходе к - без кэшированного содержимого - идентична нажатию клавиши f5?

Как я уже говорил в начале, на странице много других jQuery, все из которых работают должным образом .

Кто-нибудь понял, что здесь происходит? * 10 35 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...