Почему текстовый параметр становится объектом внутри функции? - PullRequest
0 голосов
/ 08 апреля 2020

Я закончил учебник WordPress Gutenberg, в котором у меня есть эта функция;

    var mapSelectToProps = function( select ) {     
        return {
            metaFieldValue: select( 'core/editor' )
            .getEditedPostAttribute( 'meta' )
            [ 'sidebar_plugin_meta_block_field' ],
        }
    }

Я хочу изменить этот код так, чтобы вместо имени мета-поля 'sidebar_plugin_meta_block_field' было жестко закодировано в функции, которую оно передается в качестве параметра.

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

    var meta_key_name = 'sidebar_plugin_meta_block_field';
    console.log("key 1 "+meta_key_name);

    var mapSelectToProps = function( select, meta_key_name ) {

        console.log("key 2 "+meta_key_name);

        return {
            metaFieldValue: select( 'core/editor' )
            .getEditedPostAttribute( 'meta' )
            [ { meta_key_name } ],
        }

}

В консоли вывод для клавиши 1, как и следовало ожидать, представляет собой текстовую строку - 'sidebar_plugin_meta_block_field'

Тем не менее, ключ 2 выводится на консоль [объект Object]

При дальнейшем изучении это, похоже, имеет один атрибут - setMetaFieldValue И, похоже, содержит ссылку на функцию - function () {var t; return (t = n.current (r.dispatch, r)) [e] .apply (t, arguments)}

Итак, мой вопрос: почему я не могу передать в эту функцию простой текстовый параметр?

Весь код находится внутри функции, вызывающей себя

( function( wp ) {

    .....

} )( window.wp );

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 08 апреля 2020

Вы сами превращаетесь в объект, помещая переменную в скобки {}. Попробуйте это

var meta_key_name = 'sidebar_plugin_meta_block_field';
    console.log("key 1 "+meta_key_name);

    var mapSelectToProps = function( select, meta_key_name ) {

        console.log("key 2 "+meta_key_name);

        return {
            metaFieldValue: select( 'core/editor' )
            .getEditedPostAttribute( 'meta' )
            [ meta_key_name ], // Remove brackets
        }

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