如何在php中将数组值设置为javascript函数闭包?

How to set array value as javascript function closure in php?

我正在尝试在我的 php 项目中为 handsontable 插件实现我自己的渲染器。 因此,插件的参数集准备为 php array:

$options = [
    'data' => $orders,
    'columns' => [
        [
            'data' => 'email',
            'renderer' =>

// Heredoc goes here
<<<JAVASCRIPT
function(value) {
    console.log(value);
}
JAVASCRIPT

        ],
        ...
    ]
];

然后作为参数传递给插件:

$this->registerJs('hot = new Handsontable("mydiv", ' . json_encode($options) . ')');

所以当呈现 html 时,我看到了这个:

hot = new Handsontable("mydiv", {
    'data': ...,
    'columns': [
        {
            'data': 'email',
            // Here is the problem!
            'renderer': 'function(value) { \n\r console.log(value) \n\r }'
        },
        ...
    ]
});

问题是我无法将此函数作为闭包传递,只能作为引号中的文本传递。

可能吗?

您不能在 JSON 中对函数进行编码。要做的事情是将对象分配给一个变量,这样您就可以将函数作为单独的步骤添加到 Javascript.

$options = [
    'data' => $orders,
    'columns' => [
        [
            'data' => 'email'
        ],
        ...
    ]
];

$jsFunc = <<<JAVASCRIPT
function(value) {
    console.log(value);
}
JAVASCRIPT;

$this->registerJs('var options = ' . json_encode($options) '; options.columns[0].renderer = ' . $jsFunc . '; hot = new Handsontable("mydiv", options);');