8

我一直在尝试将 php 变量的值传递给 JavaScript。当 js 代码放在同一个 php 视图文件中时,我可以做到这一点。但我不想将 js 代码放在 php 中,因为调试或进一步开发变得非常乏味。

$this->registerJsFile('/js/myJs.js', [JqueryAsset::className()]);

请帮忙。

4

4 回答 4

8

对于从 php 到 js 的传递变量,您可以使用

 Yii::$app->view->registerJs('var max = "'. $maxMinCost['max'].'"',  \yii\web\View::POS_HEAD);
于 2014-09-08T07:24:06.577 回答
4

另一种选择(与使用 传递数据相比registerJs)是为您的 HTML 元素添加一些data属性。当某个元素代表某个对应的事物时,这通常是有意义的。例子:

<table>
    <?php foreach($items as $item) { ?>
    <tr data-item-id="<?= $item->id ?>">
        <td>something...</td>
    </tr>
    <?php } ?>
</table>

然后您可以将 JS 代码放在单独的(未生成的)文件中。

一些data属性和用法的文档可以在MDN中找到。

于 2015-04-10T07:47:15.347 回答
4

从 2.0.14 版开始,有 registerJsVar() 可用。

$this->registerJsVar ('modalTitle', Yii::t('app', 'Update details' ), View::POS_BEGIN);
于 2020-05-19T10:34:42.510 回答
3

在使用外部 JS 脚本之前使用内联 JS 脚本。

$inlineScript = 'var key = ' . $value . ';';
$this->registerJs($inlineScript, View::POS_HEAD, 'my-inline-js');

$this->registerJsFile('/js/myJs.js', [
    'depends' => [...],
    'position' => View::POS_BEGIN);

位置常量用于确保 JS 变量,如上例中的“key”在外部脚本之前定义。

还有其他方法可以将 PHP 变量传递给外部 JS 脚本,例如 Ajax。请参阅“如何将变量和数据从 PHP 传递到 JavaScript? ”以获得更多详细信息。

于 2015-01-22T07:56:38.367 回答