我有以下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
},
});
});
我使用" BookAsset"。
包含此脚本下面
url: "URL",
我需要动作的网址" book-event"在控制器书中。
在服务器上,我可以这样做:
Url::to('/book/book-event')
但是如何在客户端获取URL?
有一个解决方案:
1。 js文件包含来自BookAsset。
视图文件中的2。我注册了包:
\frontend\assets\BookAsset::register($this);
视图文件中的3。定义了一个bookEventURL变量。现在可以在js文件中找到它。
$this->registerJs('var bookEventURL = ' . Url::to('/book/book-event') . ';');
但我不喜欢这个解决方案。 在许多视图中使用此脚本时会发生什么。我必须在每个视图中定义一个变量bookEventURL?
我的问题。是否可以将js变量绑定到我的BookAsset。当我在视图中注册我的BookAsset时,页面源代码会自动插入下一个代码:
<script>var bookEventURL = "http://example.com/book-event/";</script>
答案 0 :(得分:3)
这样做的一种正确方法是在按钮标记中添加所需信息,例如:
<?= Button::widget([
'label' => 'Order',
'options' => [
'class' => 'order-event-btn',
'data' => [
'url' => Url::to(['book/book-event']),
],
],
]) ?>
在你的js代码中:
$(".order-event-btn").click(function(e) {
var url = $(this).data('url');
// ...
});
但如果你真的想“绑定js变量”到你的BookAsset
,你可以简单地覆盖register()
:
public static function register($view)
{
parent::register($view);
$view->registerJs('var bookEventURL = ' . json_encode(Url::to(['book/book-event'])) . ';');
}
答案 1 :(得分:0)
如果您想在应用程序的不同位置使用它,我猜您应该将它放在布局中。