YII2。在js中使用URL'

时间:2016-06-06 09:39:11

标签: 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
},
});
});

我使用" 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>

2 个答案:

答案 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)

如果您想在应用程序的不同位置使用它,我猜您应该将它放在布局中。