Два приложения aurelia на одной странице связываются дважды - PullRequest
0 голосов
/ 06 июля 2018

Я использую Webpack 3 для объединения двух отдельных приложений Aurelia на одной странице.

Один является основной частью приложения и использует стандартный setRoot метод:

export function configure(aurelia) {
    aurelia.use
        .standardConfiguration()
        .feature(PLATFORM.moduleName('resources/index'));

    aurelia.start().then(a => {
        aurelia.setRoot(PLATFORM.moduleName('shells/app'),
        document.getElementById('AppBodyContainer'));
    });
}

Другой использует метод расширения в старом представлении MVC

const enhanceNode = (app, node, bindingContext = null) => {
    const engine = app.container.get(TemplatingEngine);
    const component = engine.enhance({
        container: app.container,
        element: node,
        resources: app.resources,
        bindingContext: bindingContext
    });
    component.attached();
};

export function configure(aurelia) {
    aurelia.use
        .standardConfiguration()
        .feature(PLATFORM.moduleName('resources/index'));

    aurelia.start().then(a => {
        enhanceNode(a, document.getElementById('HeaderContainer'));
    });
}

Оба являются автономными приложениями aurelia, и оба используют веб-пакет AureliaPlugin

new AureliaPlugin({
    aureliaApp: 'header-app'
}),

Проблема в том, что, когда оба они находятся на одной странице, отдельная версия aurelia-binding мешает друг другу, что означает, что все, что связано с click.delegate, запускается дважды при нажатии.

Что я делаю не так?

1 Ответ

0 голосов
/ 09 июля 2018

Вы не делаете ничего плохого, это что-то особенное для click.delegate.Aurelia помещает общий прослушиватель событий в тег body, до которого всплывают события delegate, поэтому из-за этого в каждом событии будет два прослушивателя.

Вы можете использовать click.trigger, который не используетделегирование события, но вместо этого помещает слушателя непосредственно в элемент (обязательно отмените пузырь, вернув false из вашего обработчика).

...