Los*_*Dok 1 javascript php yii2
我有以下 javascript 代码
$(".order-event-btn").click(function(e) {
$.ajax({
url: "URL",
type: "POST",
data: {
eventId: $(e.target).attr('data-event-id'),
},
success: function(data) {
//Some code
},
error: function(data) {
//Some code
},
});
});
Run Code Online (Sandbox Code Playgroud)
我使用“BookAsset”包含此脚本。
这里
url: "URL",
Run Code Online (Sandbox Code Playgroud)
我需要控制器 Book 中操作“book-event”的 URL。
在服务器上,我可以这样做:
Url::to('/book/book-event')
Run Code Online (Sandbox Code Playgroud)
但是如何在客户端获取 URL?
有一个解决方案:
1. js 文件通过 BookAsset 包含。
2.在视图文件中我注册包:
\frontend\assets\BookAsset::register($this);
Run Code Online (Sandbox Code Playgroud)
3.在视图文件中定义一个 bookEventURL 变量。现在它在 js 文件中可用。
$this->registerJs('var bookEventURL = ' . Url::to('/book/book-event') . ';');
Run Code Online (Sandbox Code Playgroud)
但我不喜欢这个解决方案。 当我在许多视图中使用这个脚本时会发生什么。我必须在每个视图中定义一个变量 bookEventURL 吗?
我的问题。是否可以将 js 变量绑定到我的 BookAsset。当我在视图中注册我的 BookAsset 时,在页面源代码中自动插入下一个代码:
<script>var bookEventURL = "http://example.com/book-event/";</script>
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是在按钮标签中添加所需的信息,例如:
<?= Button::widget([
'label' => 'Order',
'options' => [
'class' => 'order-event-btn',
'data' => [
'url' => Url::to(['book/book-event']),
],
],
]) ?>
Run Code Online (Sandbox Code Playgroud)
在你的 js 代码中:
$(".order-event-btn").click(function(e) {
var url = $(this).data('url');
// ...
});
Run Code Online (Sandbox Code Playgroud)
但是如果你真的想“绑定 js 变量”到你的BookAsset,你可以简单地覆盖register():
public static function register($view)
{
parent::register($view);
$view->registerJs('var bookEventURL = ' . json_encode(Url::to(['book/book-event'])) . ';');
}
Run Code Online (Sandbox Code Playgroud)