Доступ к Encore-js-File вне бис (устаревшее приложение) - PullRequest
0 голосов
/ 28 декабря 2018

В одном из моих проектов я собираюсь пошагово обмениваться файлами js.Один из моих файлов (hta.js) содержит это:

export function likeUnlikePost(element, $tag, $companyId) {
    var elementId = element.target.getAttribute('data-id');
    var action = $('#heart-button-' + elementId).attr('action');
    if (action == null) {
        action = $('#love-heart-button-' + elementId).attr('action');
    }
    $.post('/posts/ajax/edit/like/' + elementId, {
        action: action,
        tag: $tag,
        companyId: $companyId,
    })
        .done(function (data) {
            var response = data[elementId];
            if (response == 'unliked') {
                $('#heart-button-span-' + elementId)
                    .removeClass('htaRed').addClass('htaGrey');
                $('#r-heart-button-span-' + elementId)
                    .removeClass('htaRed').addClass('htaGrey');
                $('#r-heart-button-' + elementId).attr('action', 'like');
                $('#heart-button-' + elementId).attr('action', 'like');
            } else if (response == 'liked') {
                $('#heart-button-span-' + elementId)
                    .removeClass('htaGrey').addClass('htaRed');
                $('#r-heart-button-span-' + elementId)
                    .removeClass('htaGrey').addClass('htaRed');
                $('#r-heart-button-' + elementId).attr('action', 'unlike');
                $('#heart-button-' + elementId).attr('action', 'unlike');
            }
            $('#heart-likes-' + elementId)
                .html(data['count']);
            $('#r-heart-likes-' + elementId)
                .html(data['count']);
            $('#div-loved-posts')
                .html(data['lovedPostsHtml'])
                .foundation();
        })
        .fail(function (data) {

        });
}

Я хотел бы получить доступ к этой функции с двух сторон в моем проекте.Я попробовал это в webpack.config.js:

var Encore = require('@symfony/webpack-encore');

Encore
    .setOutputPath('web/assets/')
    .setPublicPath('/assets')
    .setManifestKeyPrefix('../assets')
    .addEntry('hta', './app/Resources/js/hta.js')
    .addEntry('app', './app/Resources/js/app.js')
    .autoProvideVariables({
        'hta': 'hta',
        'global.hta':'hta',
    })

    .enableSassLoader()
    .enableSourceMaps(!Encore.isProduction())
    .cleanupOutputBeforeBuild()
    .configureFilenames({
        js: 'js/[name].js',
        css: 'css/[name].css',
        images: 'images/[name].[ext]',
        // images: 'images/[path]/[name].[ext]',
        fonts: 'fonts/[name].[ext]'
    })
;    
module.exports = Encore.getWebpackConfig();

Но, когда я пытаюсь получить доступ к этой функции через

document.hta.likeUnlikePost($element, '');

, я просто получаю сообщение об ошибке:

TypeError: document.hta is undefined

Я думал, что попробовал, как в этом примере: введите описание ссылки здесь

Но я не могу заставить его работать правильно.

Ответы [ 2 ]

0 голосов
/ 01 января 2019

2 возможности: 1 / использовать экспорт, как вы.Поэтому удалите файл из веб-пакета и вызовите import {} из 'path к вашему файлу.Здесь app / Resources / assets / hta.js 2 / использовать webpack удалить функцию экспорта и объявить вашу функцию в разрешении. Теперь я думаю, что вы можете напрямую вызывать вашу функцию

В двух случаях не опускайте аргументы.

Пока

0 голосов
/ 30 декабря 2018

Вы должны импортировать свою функцию перед вызовом.

Надеюсь, что это поможет вам.

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