Ember вызывает код jQuery только при начальной визуализации - PullRequest
0 голосов
/ 09 июля 2020

В моем классе компонентов Ember я хочу запустить код jQuery, чтобы скрыть некоторые элементы. Однако я хочу, чтобы этот код запускался только при начальном рендеринге, а не при других событиях (скажем, grid refre sh)

hidePositionElements: function() {
    var self = this;
    var currPosLabelElements = $( ".my-grid-footer-value");
    currPosLabelElements.hide();
},

Я пробовал добавить в «didRender», но это выполняется несколько раз.

Также попытался вызвать указанную выше функцию из хука «didInsertElement», но jQuery не может найти элементы на этом этапе.

1 Ответ

2 голосов
/ 10 июля 2020

Если элементы не могут быть найдены на didInsertElement(), вы можете попробовать запустить код jQuery после небольшой задержки, например

import Component from '@glimmer/component'
import { later } from '@ember/runloop';

export default class MyComponent extends Component {
    didInsertElement() {
        later(function () {
            $( ".my-grid-footer-value").hide();
        });
    }
}

later() здесь похож на setTimeout(), но работает в Ember runl oop. И поскольку задержка не указана, это должно выполняться как можно скорее (надеюсь, элементы нижнего колонтитула вашей сетки будут существовать к моменту его выполнения). это в методе runl oop (обычно run()), чтобы Ember мог запланировать запуск кода в нужное время.

Однако в качестве наилучшей практики Ember вам следует постараться не изменять DOM самостоятельно и вместо этого позволить Ember обрабатывать это (используя что-то вроде {{#if this.showPositionElements}} ... {{/if}}, а затем переключая showPositionElements).

...