如何在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);');
我正在尝试在我的 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);');